使用 RSA 密钥来免密登录

  1. 使你的服务器支持密钥登陆,如果已经设置过的可以跳到下一步

    1. 可以去 这里 看一看菜鸟教程的教学,我把主要过程摘录如下:

    2. 登陆你打算使用密钥登录的账户,执行以下指令:

    1
    cd ~ & ssh-keygen
    1. 然后一路回车,不要设置密钥锁码!否则登陆的时候还得再输这个码,直接回车就行
    1
    2
    3
    4
    cd .ssh
    cat id_rsa.pub >> authorized_keys
    chmod 600 authorized_keys
    chmod 700 ~/.ssh
    1. 用 FTP 把 ~/. ssh/id_rsa(就是刚生成的私钥)下下来,我的建议是重命名(起个有意义的名字)后放进 %USERPROFILE%/.ssh/ 目录下,因为自机生成的密钥也会放在这个文件夹, 可修改相应的 config 文件

    2. 编辑 /etc/ssh/sshd_config, 增加(修改/去除注释化/检查)的设置如下

    1
    2
    3
    4
    5
    6
    7
    RSAAuthentication yes
    PubkeyAuthentication yes
    PermitRootLogin yes

    # 如果希望的话,可以用下面的设置禁止使用密码登陆
    # 记得先测试了可以用密钥再改
    PasswordAuthentication no
    1. 测试可以使用密钥连接后,重启 SSH 服务
    1
    service sshd restart
  2. 将 Windows Terminal 的配置中 “ 命令行 “ 的值更改一下

    1
    2
    3
    ssh -i [私钥路径] -p [端口] [用户名]@[服务器ip]
    #例如:
    ssh -i "C:/Users/usr/.ssh/id_rsa_server" -p 2342 example@114.514.114.514
  3. 如果你是跟着别人的教程或者官方文档走的,在 settings.json 中写路径的时候记得转义引号,使用 / 而非 ,或者你也可以转义。如:

1
"commandline": "ssh -i \"C:\\Users\\usr\\.ssh\\id_rsa_server\" -p 1145 example@114.514.114.514",

贴上微软官方文档的链接 Windows 终端 SSH | Microsoft Learn

~/.ssh/config 配置实现

参考

最常用的登陆方法是 ssh username@server -p port

通过 ~/.ssh/confg 配置文件,实现免密、更改名称的登陆方法,不论你的 username、server address、port 是什么,都可以不用输入,只需要输入一个替换的名称即可登陆该服务器。像这样 ssh <any name here>

将公钥 rsa. pub 上传到服务器

使用 ssh-copy-id 命令将生成的公钥上传到服务器

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@server -p 22

ssh-copy-id 的本质是把你本地的公钥添加到服务器/远程机的 ~/.ssh/authorized_keys 文件里
powershell 不给力,那我们自己 Ctrl CV 就好了

ssh-keygen 生成密钥后,家目录/.ssh 就会多两个文件

  • id_rsa:私钥
  • id_rsa.pub:公钥

注意权限chmod 600 ~/.ssh/config

常用的 SSH 配置项

1、config 文件配置项

1
2
3
4
5
6
7
Host 			别名
HostName 主机名
Port 端口
User 用户名
IdentityFile 密钥文件的路径
IdentitiesOnly 只接受SSH key 登录
PreferredAuthentications 强制使用Public Key验证

2、Host 配置

Host 配置项标识了一个配置区段。
SSH 配置项参数值可以使用通配符:

1
2
3
'*' 代表 0~n 个非空白字符。
'?' 代表一个非空白字符。
'!' 表示例外通配。