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 user@x.x.x.x
将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 chenbo@ServerA:~/
同步/svr/data文件夹到ServerA的/svr目录下,--delete是删除目标文件夹中源文件夹里没有的文件,总之让目标文件夹和源文件夹完全相同。
rsync -azv --progress -e ssh --delete /svr/data chenbo@ServerA:/svr