前言:SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议。不同主机之间在进行通信时,一般都是需要输入密码进行验证, ssh免密码之后,只要通过指定主机地址和端口号就可以实现不同的计算机之间访问时,不需要密码实现直接访问。
1、生成ssh私钥和公钥
一般情况下你的电脑因为要使用git所以应该提前配置好了ssh的公钥和私钥,如果还没有配置好,可以使用以下命令进行生成,然后一直回车即可
ssh-keygen -t rsa -C '你的邮箱'
2、上传公钥
如果你懂git那么应该知道ssh上传代码是将我们的公钥配置到github中并使用本地的私钥与github的公钥进行配对,那么免密登录也是一样的道理,我们需要使用如下命令将我们的公钥上传至目标服务器中
ssh-copy-id 目标服务器ip
这里要注意的是,这条命令是liunx系统或者mac系统可以使用,windows是没有这个命令的。而ssh-copy-id命令原理则是在目标服务器的.ssh目录下生成一个名为authorized_keys的文件,这里面的内容即是你本地刚刚上传的公钥,当然authorized_keys文件中可以配置多个公钥让多个主机免密登录服务器,只需要继续使用ssh-copy-id命令上传新的公钥即可,或者手动在里面添加公钥,每一行即为一个公钥。
2.1windows上传公钥
由于windows无法使用ssh-copy-id命令,所以我们需要先登录目标服务器,并且在.ssh目录下创建一个名为authorized_keys的文件,并且在文件内容中添加你的公钥即可。
3、免密登录赋权
需要注意的是,不管你是通过ssh-copy-id上传的公钥还是你手动新增authorized_keys文件后添加的公钥,都需要保证.ssh目录权限为700,authorized_keys文件权限为600,否则会因为权限的问题无法免密登录。授权语句如下:
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
4、指定私钥免密登录
如果你手上有一份不是你本机的私钥并且服务器上有这个私钥对应的公钥那么你也可以指定
私钥文件进行免密登录
同样需要注意的是你使用的这个私钥的权限必须是600,外面那层目录的权限必须是700
例如我现在有一个文件夹ssh且文件夹中有id_rsa私钥文件则我可以进行如下操作:
4.1私钥目录赋权
chmod 700 ssh
4.2私钥赋权
chmod 600 ssh/id_rsa
4.3指定私钥文件免密登录
ssh -i ./ssh/id_rsa [email protected]
5、免密上传文件
scp -i ./ssh/id_rsa ./1.txt [email protected]:/home/test
6、免密远程执行命令
ssh -i ./ssh/id_rsa [email protected] "source /etc/profile"
需要注意的是免密执行的命令如果是一个脚本比如”sh /root/1.sh”,则脚本内容中必须使用绝对路径。例如1.sh脚本中的内容是 nohup java -jar coreinterface.jar 这时候脚本可能会执行失败,如果你失败了可以改成绝对路径试试。如:nohup /usr/local/jdk1.8/bin/java -jar /root/coreinterface.jar