ssh使用备注
在使用ssh远程登录时,每次都要输入ssh root@ip命令,并且有时候服务器端暴露的ssh端口并不是22,这时候,我们要通过ssh root@ip -p port去远程登录,而当我们敲完这个命令之后还需要去输入对应的密码,我们才可以成功远程登录,当我们需要频繁的使用ssh登录的时候,会非常的麻烦。
通过配置~/.ssh/config实现ssh hostname远程登录
1 | cd ~/.ssh |
config文件内容如下:
1 | Host hostname1 |
这样就可以直接通过ssh hostname1远程登录,接下来就是解决掉输入密码的问题
实现ssh免密登录
进入用户的ssh的目录(本机,不是服务器)
1 | cd ~/.ssh |
生成ssh公钥和私钥
1 | ssh-keygen -t rsa -C "email@example.com" -f filename |
执行命令后会生成两个文件,一个是公钥filename.pub,一个是私钥filename,下一步我们需要将公钥放到服务器用户的.ssh目录下的验证文件中,这里可以使用ssh提供的ssh-copy-id工具(当然也可以手动上传,追加到服务器用户ssh目录下的authorized_keys文件中)
1 | ssh-copy-id -i ~/.ssh/filename.pub root@hostname |
假设生成密钥时候设置的名字不是id_rsa,则需要配置config才可以让ssh使用对应的私钥文件,在配置的主机的信息下面加上IdentityFile的配置:
1 | Host hostname1 |
到此,客户端配置完毕,接下来要修改服务器上ssh服务的设置了,首先需要将服务器端的ssh服务设置为可以通过秘钥来认证登录,具体操作方法为修改/etc/ssh/sshd_config文件的配置,修改如下:
1 | PubkeyAuthentication yes |
最好将服务器端的用户目录下的.ssh的所属用户设置为满权限
1 | chmod 700 ~/.ssh |
修改好上述两个配置后,重启服务器的sshd服务
1 | systemctl restart sshd |
至此,我们的客户端就可以直接使用ssh hostname直接远程登录了
FAQ
假如在生成密钥文件的时候输入了密码,这个时候有一个比较头疼的问题,需要手动输入生成密钥时候的密码,提示信息为:Enter passphrase for key ‘/Users/**/.ssh/id_rsa’,这个时候可以下面命令进行修改密码
1
ssh-keygen -p