linux经常有通过ssh远程控制其他服务器、远程同步文件等操作,如果不进行SSH免密设置,每次都要输入密码,不太方便,我们来看看怎么进行ssh免密设置,避免每次都要输入密码。
首先在本地机器生成公私秘钥,执行如下命令,一路回车即可
ssh-keygen -t rsa
将在~/.ssh文件夹下生成id_rsa(私钥)和id_rsa.pub(公钥)。
然后将公钥上传远程机器,并生效(写入远程的.ssh/authorized_keys),执行如下一条命令即可:
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port [email protected]
将user替换为你在远程的用户名,如果端口是默认的22,可以不写。执行这条命令需要输入远程密码,执行完成后,公钥应该成功写入了远程user的home/.ssh/authorized_keys中,以后远程该机器就不需要输入密码了。试试远程该机器:
ssh -p port x.x.x.x
不出意外你应该以user身份成功登录了。如果嫌每次输入port和ip地址麻烦,可以在.ssh/config中做个配置,给远程机器起一个别名,打开~/.ssh/config,输入如下内容:
Host ServerA HostName x.x.x.x User user_name Port 12345 ForwardX11 yes
替换掉你的用户名、IP和端口,配置完成后,远程该机器输入如下命令就可以了:
ssh ServerA
以后通过ssh与远程机器同步文件都不需要密码了,比如rsync、scp、sftp都可免密执行。如拷贝本机home目录下的TestDir文件夹及其所有内容到远程机器的home目录,执行如下命令:
scp -r ~/TestDir ServerA:~/