ssh免密登陆

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
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

重启sshd,service sshd restart

非22端口的操作

对于22端口的,上面的操作基本就完成了,再用ssh连的时候,ssh user@ip,就可以登陆了,对于非22端口的,再记端口,麻烦,可以用config文件来搞定。

在客户端的.ssh目录下,新建一个config文件,不要后缀。

在里面写上下面这些行

1
2
3
4
5
Host ssh连接的名称
User 用户名
Port 端口号
HostName 服务端的域名或ip地址
IdentityFile id_rsa

大功告成。