SSH远程登录
最近使用到了云服务器,经常需要登陆远程服务器进行大量操作。远程登录服务器一般使用ssh协议。常用的登陆方式有两种:
1.账号+密码手动验证
$ssh user@192.168.1.1
$password:
2.公钥+私钥对自动验证(免密登录)
$ssh user@192.168.1.1
免密登录配置
两种登陆方式对比下来第二种方式更为方便且有些程序例如hadoop要求我们配置免密登录。
原理
利用公钥密码算法的安全特性,即:使用A的私钥加密的内容能由A的多个公钥解开而使用A的公钥加密的内容只能由A的私钥解开。通信双方分别使用公钥、私钥进行数据加密解密与身份认证。私钥唯一,由拥有者秘密保存,非公开。公钥公开,每个人都能获取。
在ssh登录的应用中,由ssh客户端生成私钥/公钥对,并将公钥发送到ssh服务端用来实现身份证。
配置
1.生成密钥对并使用私钥
#生成rsa公钥/私钥对,保存到用户根目录下.ssh文件夹下的id_rsa,passphrase为空。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#使私钥生效
$ ssh-add id_rsa
命令会自动生成名为id_rsa
的私钥文件和id_rsa.pub
的公钥文件并储存在~/.ssh
目录下(ssh密钥文件的默认存储目录,当不存在时可手动创建,注意权限问题)。生成成功后令系统使用该私钥。
2.将公钥上传到服务器并添加到信任列表
#将客户端生成的公钥文件上传到远程服务器的用户根目录下
$scp ~/.ssh/id_rsa.pub username@192.168.1.1:~/
#使用账号密码验证方式登录服务器后,将公钥文件添加到信任域
$cat ~/.id_rsa.pub >> ~/.ssh/authorized_keys
操作完成后,密钥对的配置就完成了,但是在测试之前要检查下服务端的ssh配置是否正确。
#查看ssh服务的配置文件
$vim /etc/ssh/sshd_config
#确保以下3项配置未被注释并配置正确
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
最后重启服务端的ssh服务
$sudo service ssh restart
现在,我们在客户端使用ssh指令登录时将自动完成验证。