61阅读

ssh远程登录linux命令-Centos6.5 中 ssh免密码登录配置教程

发布时间:2018-05-01 所属栏目:radius认证服务器

一 : Centos6.5 中 ssh免密码登录配置教程

0.说明

这里为了方便说明问题,假设有A和B两台安装了centos6.5的主机。目标是实现A、B两台主机分别能够通过ssh免密码登录到对方主机。不同主机的配置过程一样,这里介绍A主机的配置过程。

事先在AB主机分别创建好要免密码登录的用户名,在/etc/hosts文件增加主机名和ip。

创建新用户:useradd jay

设置密码:passwd jay,输入自己想要的密码即可,之后su jay切换用户

修改主机名:vim /etc/sysconfig/network,加入hostname=master,注销系统之后即可看到修改成功

修改hosts文件:vim /etc/hosts 
               192.168.88.101  master 
               192.168.88.102  slave1

1.环境设置

1.1 关闭防火墙(root权限)

centos6.5对网络管理相当严格,需要关闭selinux。到/etc/selinux/config下,把SELINUX=enforcing修改为SELINUX=disabled 。需要root权限。

bash/shell Code复制内容到剪贴板

  1. # su root   
  2. Password:   
  3. $ vim /etc/selinux/config  

找到SELINUX并修改为SELINUX=disable

1.2 修改sshd的配置文件(root权限)

bash/shell Code复制内容到剪贴板

  1. $ vim /etc/ssh/sshd_config   
  2.   找到以下内容,并去掉注释符“#”   
  3.   RSAAuthentication yes  
  4.   PubkeyAuthentication yes  
  5.   AuthorizedKeysFile      .ssh/authorized_keys  

1.3 重启sshd服务(root权限)

bash/shell Code复制内容到剪贴板

  1. $ /sbin/service sshd restart  

2.本机生成公钥和私钥

从root切换回要免密码登录的用户jay,执行命令。

bash/shell Code复制内容到剪贴板

  1. # ssh-keygen -t rsa  

默认在用户jay的家目录(~/.ssh/)生成两个文件:

id_rsa: 私钥
id_rsa.pub:公钥

3.把公钥导入到认证文件

3.1 导入到本机

bash/shell Code复制内容到剪贴板

  1. # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  

完成这一步,再按照步骤4修改相关文件权限,可以免密码登录本机。可以输入以下命令验证。

bash/shell Code复制内容到剪贴板

  1. ssh localhost  

如果能够登录,即验证成功。

3.2 导入到目标主机

3.2.1在本机操作,传送到目标主机

bash/shell Code复制内容到剪贴板

  1. # scp ~/.ssh/id_rsa.pub root@目标主机ip或主机名:/home/id_rsa.pub  

注意把文件传送到目标主机时,要用root用户,否则会因权限不够而拒绝。输入目标主机密码后,出现OK即传输成功。

3.2.2 登录到目标主机,把公钥导入到认证文件

使用要被免密码登录的用户名jay,登录到目标主机。然后执行以下操作。

bash/shell Code复制内容到剪贴板

  1. # cat /home/id_rsa.pub >> ~/.ssh/authorized_keys  

再按照步骤4修改相关文件权限,完成免密码登录设置。

4.更改相关文件的权限

bash/shell Code复制内容到剪贴板

  1. # chmod 700 ~/.ssh   
  2. # chmod 600 ~/.ssh/authorized_keys  

至此,完成免密码登录设置。

5. 测试

A主机(jay@master),B主机(jay@slave1)。在A主机,切换为jay用户,执行以下命令测试:

ssh slave1

能够免密码直接登录,即设置成功。如果出错,请仔细检查以上各个步骤。

以上所述是小编给大家介绍的Centos6.5 中 ssh免密码登录配置教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对61阅读网站的支持!

二 : Linux系统中SSH命令的使用教程

ssh用于登录远程主机, 并且在远程主机上执行命令,它的目的是替换rlogin和rsh,同时在不安全的网络之上,两个互不信任的主机之间, 提供加密的, 安全的通信连接.先来看一下ssh命令的一些参数:

参数

-a
    禁止转发认证代理的连接.
   
-A
    允许转发认证代理的连接. 可以在配置文件中对每个主机单独设定这个参数.
    代理转发须谨慎. 某些用户能够在远程主机上绕过文件访问权限 (由于代理的 UNIX 域 socket), 他们可以通过转发的连接访问本地代理. 攻击者不可能从代理获得密钥内容, 但是他们能够操作这些密钥, 利用加载到代理上 的身份信息通过认证.
   
-b bind_address
    在拥有多个接口或地址别名的机器上, 指定收发接口.
   
-c blowfish|3des|des
    选择加密会话的密码术. 3des 是默认算法. 3des (triple-des) 用三支不同的密钥做加密-解密-加密三次运算, 被认为比较可靠. blowfish 是一种快速的分组加密术(block cipher), 非常安全, 而且速度比 3des 快的多. des 仅支持 客户端, 目的是能够和老式的不支持 3des 的协议第一版互操作. 由于其密码算法上的弱点, 强烈建议避免使用.
   
-c cipher_spec
    另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的密码术. 详见 Ciphers
   
-e ch|^ch|none
    设置 pty 会话的 escape 字符 (默认字符: `~' ) . escape 字符只在行首有效, escape 字符后面跟一个点 (`.' ) 表示结束连接, 跟一个 control-Z 表示挂起连接(suspend), 跟 escape 字符自己 表示输出这个字符. 把这个字符设为 ``none 则禁止 escape 功能, 使会话完全透明.

-f
    要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.
   
-g
    允许远端主机连接本地转发的端口.
   
-i identity_file
    指定一个 RSA 或 DSA 认证所需的身份(私钥)文件. 默认文件是协议第一版的 $HOME/.ssh/identity 以及协议第二版的 $HOME/.ssh/id_rsa 和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中对每个主机单独指定身份文件. 可以同时使用多个 -i 选项 (也可以在配置文件中指定多个身份文件).
   
-I smartcard_device
    指定智能卡(smartcard)设备. 参数是设备文件, 能够用它和智能卡通信, 智能卡里面存储了用户的 RSA 私钥.
   
-k
    禁止转发 Kerberos 门票和 AFS 令牌. 可以在配置文件中对每个主机单独设定这个参数.
   
-l login_name
    指定登录远程主机的用户. 可以在配置文件中对每个主机单独设定这个参数.
   
-m mac_spec
    另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的 MAC(消息验证码)算法 (message authentication code). 详情以 MACs 为关键字查询.
   
-n
    把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)
   
-N
    不执行远程命令. 用于转发端口. (仅限协议第二版)
   
-o option
    可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项.
   
-p port
    指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数.
   
-q
    安静模式. 消除所有的警告和诊断信息.
   
-s
    请求远程系统激活一个子系统. 子系统是 SSH2 协议的一个特性, 能够协助 其他应用程序(如 sftp)把SSH用做安全通路. 子系统通过远程命令指定.
   
-t
    强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务. 并联的 -t 选项强制分配终端, 即使 没有本地终端.
   
-T
    禁止分配伪终端.
   
-v
    冗详模式. 使 打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用. 并联的 -v 选项能够增加冗详程度. 最多为三个.
   
-x
    禁止 X11 转发.
   
-X
    允许 X11 转发. 可以在配置文件中对每个主机单独设定这个参数.
    应该谨慎使用 X11 转发. 如果用户在远程主机上能够绕过文件访问权限 (根据用户的X授权数据库), 他就可以通过转发的连接访问本地 X11 显示器. 攻击者可以据此采取行动, 如监视键盘输入等.
   
-C
    要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中, 压缩级别 ``level 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而 可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项.
   
-F configfile
    指定一个用户级配置文件. 如果在命令行上指定了配置文件, 系统级配置文件 (/etc/ssh/ssh_config ) 将被忽略. 默认的用户级配置文件是 $HOME/.ssh/config
   
-L port:host:hostport
    将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
   
-R port:host:hostport
    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
   
-D port
    指定一个本地机器 ``动态的 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
   
-1
    强制 只使用协议第一版.
   
-2
    强制 只使用协议第二版.
   
-4
    强制 只使用 IPv4 地址.
   
-6
    强制 只使用 IPv6 地址.

基本用法

最简单的 SSH 命令只需要指定用户名和主机名参数即可. 主机名可以是 IP 地址或者域名. 命令格式如下:


$ ssh user@hostname


比如要在我的局域网内登录一个树莓派系统, 只需要简单的在命令行输入如下命令:


$ ssh pi@10.42.0.47


命令中的 pi 和 10.42.0.47 分别是我的树莓派系统的用户名和局域网 IP 地址. 实际使用时主机名需要改成你的目标主机(局域网内或者远程)的 IP 地址.
2016119120410920.png (639×38)

如果你能够成功登陆, 那么下面的内容对你来说就轻而易举了.

使用其他端口

SSH 默认连接到目标主机的 22 端口上,但是由于各种原因你可能需要连接到其他端口.


$ ssh -p 10022 user@hostname


如上命令就是通过添加参数 -p 指定端口号为 10022.

远程执行命令

有时在远程主机执行一条命令并显示到本地, 然后继续本地工作是很方便的. SSH 就能满足这个需求:


$ ssh pi@10.42.0.47 ls -l


比如上面这个命令就会枚举远程主机的主目录内容并在本地显示. 是不是很酷? 你可以尝试下其他命令看看.
2016119120446346.png (641×65)

挂载远程文件系统

另外一个很赞的基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统.


$ sshfs -o idmap=user user@hostname:/home/user ~/Remote


比如下面这条命令:


$ sshfs -o idmap=user pi@10.42.0.47:/home/pi ~/Pi


该命令就将远程主机 pi 用户的主目录挂载到本地主目录下的 Pi 文件夹.

要详细了解可以参考 sshfs 教程.

X11 图形界面

假如现在你想要在远程主机运行一个图形界面的程序, SSH 已经帮你想到了! 用前面提到的 SSH 基本命令加上参数 -X 连接到远程主机即可开启 X11 转发功能. 登录后你可能觉得没什么差别, 但是当你运行一个图形界面程序后就会发现其中的不同的.


$ ssh -X pi@10.42.0.47
$ pistore


如果你想在运行图形界面程序的同时做些别的事情, 只需要简单地在命令末尾加一个 & 符号.


$ pistore&


2016119120507899.png (638×242)

转义字符

SSH 提供了多样的转义字符功能. 用 SSH 连接到任意一台远程主机然后输入 ~? 你就可以看到支持的转义字符和功能说明列表. 以下例子展示了 ~# 和 ~C 的效果.
2016119120524275.png (639×273)

配置 SSH

如果你需要改变 SSH 的配置, 请用你喜好的文本编辑器打开 /etc/ssh/sshd_config 进行编辑. 比如你想改变登陆的标语, 在配置文件中找到下面这行:


#Banner none


删除 # 字符(取消该行的注释), 将 none 替换为包含你期望显示内容的文件地址. 修改后该行应该类似这样:


Banner /etc/issue


在配置文件 /etc/ssh/sshd_config 中你还可以找到端口号, 空闲超时时间等配置项. 配置项大都比较容易理解, 但是保险起见在你修改一些不是很确定的配置项时最好参考下 SSH 的帮助文档.

构建 ssh 密钥对

运行以下命令创建密钥对:


$ ssh-keygen -t dsa


此命令会要求你输入密码(可以留空), 然后就会生成密钥并会显示一张该密钥对应的随机图.
2016119120542876.png (639×332)

寻找主机密钥

在你准备添加密钥之前不妨先用以下命令看看是否已经添加了对应主机的密钥了.


$ ssh-keygen -F 10.42.0.47


2016119120557712.png (643×92)

删除主机密钥

某些情况下, 比如主机地址更改或者不再使用某个密钥, 你就可能需要删除某个密钥.


$ ssh-keygen -R 10.42.0.47


用以上命令就可删除. 这比手动在 ~/.ssh/known_hosts 文件中删除要方便很多.
2016119120613822.png (638×81)

总结

通过以上的内容你应该可以轻松使用 SSH 了. SSH 还有很多功能值得你去发掘, 这就要看你的想象力了。

三 : Linux环境中远程开启ssh端口和更改ssh用户根目录

远程密令临时开启ssh端口

nux服务器,我们一般是通过ssh通道远程管理,这就需要我们开启ssh端口,如22。但开启端口有被暴力破解的风险,你会说可以设置复杂的密码或使用证书避免。就算破解不了密码,但openssh也可能会有漏洞,你会说可以更改ssh端口,但还是有可能被扫描出来。还有一种选择,我们可以只允许指定IP访问ssh,通过vpn登录管理服务器,但局限很明显,万一紧急情况vpn登录不上去了怎么办。下面给出一种个人觉得比较满意的解决方案,即使用iptables的recent模块,通过密令临时开启ssh端口。当然,密令需要保管好,防止外泄。
1、iptables规则设定
#指定78字节的icmp数据包(包含IP头部20字节,ICMP头部8字节)通过被加入sshopen列表。


iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --set --name sshopen --rsource -j ACCEPT


#检查sshopen列表是否存在你的来源IP,如果存在,即从第一次使用密令开始15秒钟内开启ssh端口22,超过15秒端口自动关闭,不再允许新连接,已连接的不会断开。


iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT


2、临时开启ssh端口密令
linux下:

ping -s 50 host


3、我目前使用的iptables规则


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 123 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 50 -m recent --set --name sshopen --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

使用jailkit chroot更改ssh用户根目录
安装jailkit


cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz
tar xzf jailkit-2.16.tar.gz
cd jailkit-2.16
./configure
make
make install
cp extra/jailkit /etc/init.d/jailkit
chmod u+x /etc/init.d/jailkit
chkconfig jailkit on


初始化chroot环境


jk_init -v -j /home/chroot sftp scp jk_lsh netutils extendedshell
service jailkit start


新建www.61k.com用户


useradd www.61k.com -m
echo www.61k.com:password | chpasswd


chroot用户


jk_jailuser -m -n -j /home/chroot --shell=/bin/bash www.61k.com

四 : 通过SSH进行密钥认证自动登录Linux服务器

传统的网络服务程序,SSH的英文全称是 Secure Shell,通过使用ssh,可以对所有的传输的数据进行加密,这样既可以防止攻击又可以防止IP欺骗。

SSH 提供2种级别的安全验证

1,基于口令的安全验证,这也是我们常用的一种,只要知道用户名和密码,就可以远程登陆到远程主机上。

2,基于密钥的安全认证,就是说用户必须为自己创建一对密钥,并把公用密钥放到需要访问的服务器上。

2种安全级别的验证,后者相对比前者更安全一些,第二种级别不需要在网络上传递口令。

SSH密钥认证登录配置

原理:用户首先需要为自己创建一对密钥:公钥(用在登录的服务器上)和私钥。OPENSSH 公开的密钥的密码体质有RSA,DSA等,这里就用RSA。

客户端ip:192.168.72.11

服务器ip:192.168.72.129

密钥认证的生成


[root@xyly ~]# ifconfig eth0 | awk ‘/inet addr/{print }’
inet addr:192.168.72.11 Bcast:192.168.72.255 Mask:255.255.255.0</p> <p>[root@xyly ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #密钥报存的位置和名称
Enter passphrase (empty for no passphrase): #密钥为空
Enter same passphrase again: #再一次输入
Your identification has been saved in /root/.ssh/id_rsa. #私钥的位置
Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥的位置
The key fingerprint is:
04:c5:7a:57:f6:2e:9c:1f:b5:e7:45:b3:11:f3:c7:18 root@xyly

公钥已经生成

现在把公钥上传到另一台服务器上去。


[root@xyly ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.72.129
The authenticity of host ’192.168.72.129 (192.168.72.129)’ can’t be established.
RSA key fingerp
rint is 3b:26:19:2e:51:ca:cc:de:ac:bc:00:09:f0:7c:7d:f1.
Are you sure you want to continue connecting (yes/no)? yes #由于是第一次登录,服务器要进行确认
Warning: Permanently added ’192.168.72.129′ (RSA) to the list of known hosts.
Address 192.168.72.129 maps to localhost, but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!
root@192.168.72.129′s password:
Now try logging into the machine, with “ssh ‘root@192.168.72.129′“, and check in:</p> <p>.ssh/authorized_keys #把公钥上传的位置和公钥的文件名</p> <p>to make sure we haven’t added extra keys that you weren’t expecting.

登录到服务器上,查看公钥是否上传


[root@localhost ~]# ll .ssh/authorized_keys
-rw——- 1 root root 391 Aug 4 18:31 .ssh/authorized_keys

说明公钥上传成功了。

修改ssh配置文件,设置公钥认证登录

将下边2行的注释去掉,重启ssh服务


RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys</p> <p>/etc/init.d/sshd restart

配置完毕,现在开始登录一下


[root@xyly ~]# ssh 192.168.72.129
Address 192.168.72.129 maps to localhost, but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!
Last login: Thu Aug 4 18:08:05 2011 from 192.168.72.1
[root@localhost ~]#

现在不用输入密码,就可以登录了。退出登录


[root@localhost ~]# exit
logout
Connection to 192.168.72.129 closed.

linux ssh 密钥认证无需输入密码即可登录,在设置密钥的同时,也可以输入密码,即可密码+密钥认证就可以完成!

本文标题:ssh远程登录linux命令-Centos6.5 中 ssh免密码登录配置教程
本文地址: http://www.61k.com/1171668.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1