CentOS生成秘钥
ssh-keygen -t rsa
用这个命令生成私钥和公钥,在输入文件名称和密码后,会在当前目录里面生成一个[filename]、[filename].pub文件。其中.pub文件是公钥文件,这个key可以用到任意用户中,如果需要放到root用户放到/home目录下,新建.ssh文件夹,并把自己的key放到authorized_keys上面即可,记得增加相关访问授权,详细命令如下:
ROOT用户
cd ~
mkdir .ssh
echo filename.pub >> ~/.ssh/authorized_keys
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
非ROOT用户
adduser yohoph
cd /home/yohoph
mkdir .ssh
echo filename.pub >> /home/yohoph/.ssh/authorized_keys
chown yohoph.yohoph /home/yohoph/.ssh -R
chown yohoph.yohoph /home/yohoph/.ssh/authorized_keys -644
开启public_key支持
vi /etc/ssh/sshd_config
重点修改配置项
#开启pubkey登录
PubkeyAuthentication yes
#禁用用户名密码登录
PasswordAuthentication no
重启服务
service sshd restart
查看登录日志
tail /var/log/secure
客户端(xshell)登录
先把上面的私钥下下来,也就是[filename]
工具-->用户密钥管理者-->导入
设置连接会话
重点是登录验证里面使用PublicKey,选择指定的用户名,刚才导入的密钥和对应的密钥密码即可使用
其他Linux客户端登录
将私钥拷贝进到当前操作系统服务器:my17_rsa
#使用my17_rsa进行登录
[root@localhost .ssh]# ssh -i my17_rsa [email protected]
Enter passphrase for key 'my17_rsa':
如果想去掉-i 使用默认文件,需要将文件存入/home/.ssh/文件中,并将文件命名为id_rsa,这样SSH的时候默认会读这个文件
使用ssh-agent免密码登录
使用ssh-agent,保存id_rsa密钥到当前会话,下次使用ssh的时候,可以免密码登录。
#将当前的密钥添加到ssh-agent中
[root@localhost .ssh]# ssh-add
Could not open a connection to your authentication agent.
#如果无法正常识别ssh-agent,可以补充一个操作
[root@localhost .ssh]# eval $(ssh-agent)
Agent pid 7427
#接着可以正常使用了
[root@localhost .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@localhost .ssh]# ssh [email protected]
Last login: Thu Jul 26 13:49:53 2018 from 192.168.10.17
root@jmsw-17:~#
但是由于ssh-agent在每次登录的时候都会使用一个新的会话,每次都需要重新add一遍。但是如果这样的话,我们就失去了免密码登录的意义了。这样有两个思路来解决这个问题。1,优化ssh-agent登录方式,去掉每次开新窗口的时候使用一个新的ssh-agent,使用同样的环境变量
使用keychain配置免密码登录
普通版本的CentOS直接使用yum安装就可以了。
yum install keychain
CentOS7下面官方源下并没有这个keychain,需要安装扩展源来安装keychain
rpm -Uvh http://packages.psychotic.ninja/7/base/x86_64/RPMS/psychotic-release-1.0.0-1.el7.psychotic.noarch.rpm
yum --enablerepo=psychotic install keychain
添加环境变量
vi ~/.bash_profile
使用chain保存private-key。注意:我这次测试的时候发现,chain-key需要带着公钥一起用,一起放到id_rsa旁边,以id_rsa_pub命名即可
#保存id_rsa
keychain $HOME/.ssh/id_rsa
#刷新配置
source $HOME/.keychain/$HOSTNAME-sh
添加配置项中,每次进入会话时,自动刷新配置
#passwordless to centos7
/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh
结束
好了,剩下的就OK了。以一个成功的命令结尾
[root@localhost ~]# ssh [email protected]
Last login: Thu Jul 26 15:11:29 2018 from 192.168.10.1
root@jmsw-17:~#