ssh免密登陆并不是什么复杂的事,但是配置了以后,会很方便。为了实现这个,在网上找了一些教程,也不知是服务器的默认配置的问题,还是什么原因,一直没有成功。
今天又试了下,在大语言模型智谱清言的帮助下,实现了免密登陆。记录一下。
客户端生成密钥
命令行中输入ssh-keygen -t rsa
,然后一路回车,可以在当前用户的文件夹下的.ssh目录里生成两个文件,id_rsa.pub和 id_rsa。id_rsa.pub是公钥,可以给别人的,另一个是私钥,只能在自己电脑上的。
客户端复制公钥到服务端
如果是windows系统,这时就最好是用winscp一类的工具软件连接服务器,linux系统,可以用ssh-cp-id命令。
我是用的windows,下面说下怎么操作。
首先ssh登陆远程服务器,然后cd到当前用户下的.ssh目录里,ls查下有无authorized_keys
这个文件,如果没有,使用touch authorized_keys
创建这个文件。
然后,nano authorized_keys
打开这个文件,也可以用vi。
第三步,用记事本打开客户端用户文件夹下.ssh目录中的id_rsa.pub
文件。
第四步,复制id_rsa.pub
中的全部内容。
第五步,到nano authorized_keys
的编辑界面,右键,自动会把刚刚复制的内容粘贴到编辑界面中。
第六步,ctrl+o,再回车,保存文件。
第七步,ctrl+x,退出编辑。
修改服务端文件权限
服务器上~/.ssh/authorized_keys
文件的权限是600,使用chmod 600 ~/.ssh/authorized_keys
修改。
修改服务端ssh配置文件
这步可以在客户端的ssh界面操作。
配置文件通常是/etc/ssh/sshd_config
,确保下面的配置是这样的。
1 | RSAAuthentication yes |
重启sshd,service sshd restart
。
非22端口的操作
对于22端口的,上面的操作基本就完成了,再用ssh连的时候,ssh user@ip,就可以登陆了,对于非22端口的,再记端口,麻烦,可以用config文件来搞定。
在客户端的.ssh目录下,新建一个config文件,不要后缀。
在里面写上下面这些行
1 | Host ssh连接的名称 |
大功告成。