ssh login with keys

使用SSH免密码登录linux服务器

关于公钥私钥

简单记忆方法:公钥为锁,位于服务器上任何人可见,生成结果带有.pub后缀;私钥为钥匙,位于个人电脑上仅个人知道

创建公钥私钥对

个人主机上输入以下命令

ssh-keygen -t ed25519 -f id_ed25519 -C "abc@abc.com"

其中-t表示生成密钥种类,建议ed25519,性能高于rsa;

-f表示生成文件名,会生成公钥私钥两个文件,这里为id_ed25519id_ed25519.pub

-C表示comment,在登录github等代码托管平台时需要注意,可能会作为代码提交的用户名称(有待验证)

生成文件保存位置为C:\Users\XXX\.ssh~/.ssh,取决于个人主机系统

修改服务器端sshd配置

服务器端用任何一个文字编辑器打开/etc/ssh/sshd_config,将以下几个字段前的#号去掉

PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys .ssh/authorized_keys2

之后重启sshd服务

sudo service sshd restart

sudo systemctl restart sshd.service

上传公钥到服务器端

上传公钥文件至服务器后,在服务器端使用cat id_ed25519.pub >> ~/.ssh/authorized_keys命令,或者直接使用文字编辑器将公钥文件中内容加入到要登录账号的~/.ssh/authorized_keys文件中,不存在该文件则人为创建后添加

  • 注意需要确认~/.ssh/authorized_keys文件权限,建议设置为600
    sudo chmod 600 ~/.ssh/authorized_keys
    

(可选)个人主机端ssh设置

个人使用情况下似乎不需要进行设置,此处列出两种方法供参考

  1. 在使用ssh命令登录时使用-i指定私钥文件

  2. 修改个人主机端的ssh config文件C:\Users\XXX\.ssh\config~/.ssh/config,举例为:

    Host server(别名,用于简单登录)
        HostName test.com/192.168.1.1(域名或IP)
        Port 22
        User user
        IdentityFile id_ed25519
    

    此后可以使用ssh server连接