实现 SSH 免 IP 免密登录

2 minute

基本配置

编辑 ~/.ssh/config

1Host 输入代替名
2    HostName 输入IP
3    Port 输入端口号
4    User 输入用户名
5    # ProxyCommand "C:\Program Files\Git\mingw64\bin\connect.exe" -S 127.0.0.1:7890 -a none %h %p
6
7# 定时发送心跳确保不断开连接
8ServerAliveInterval 30 # 每隔30秒发送一次
9ServerAliveCountMax 60 # 连续60次服务端无响应断开连接

注意代理命令 ProxyCommand 在其他机器上的不同用法:

在 unix 下为:

1ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p

其中 %h 代表目标主机 ip,%p 代表目标主机端口号,其他参数用法解释如下:

1-X proxy_version
2        Requests that nc should use the specified protocol when talking to the proxy server.
3        Supported protocols are “4” (SOCKS v.4), “5” (SOCKS v.5) and “connect” (HTTPS proxy).
4        If the protocol is not specified, SOCKS version 5 is used.
5
6-x proxy_address[:port]
7        Requests that nc should connect to hostname using a proxy at proxy_address and port.
8        If port is not specified, the well-known port for the proxy protocol is used (1080
9        for SOCKS, 3128 for HTTPS).

注意,nc 为 mac 内置软件,位于 /usr/bin/nc,如果通过 brew 安装了 netcat(nc) 则命令参数不一样。

生成并发送密钥

1ssh-keygen -t rsa

然后将公钥 ~/.ssh/id_rsa.pub 复制到目标主机 ~/.ssh/authorized_keys 文件中。

可能出现的问题

Root 登录问题

如果要通过 root 登录,而且是刚安装的系统,则通过 sudo passwd root 修改 root 密码。

同时,最初 SSH 可能默认配置的是禁止 root 通过密码登录,需要编辑 ssh 配置文件 sshd_config,新增行:

1PermitRootLogin yes

密钥算法不匹配

如果出现以下错误:

no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

则是本地密钥算法与远程主机密钥算法不匹配造成的!

可以在ssh_config或config文件中添加密钥算法配置:

1Host 输入代替名
2	HostName 输入IP
3	Port 输入端口号
4	User 输入用户
5	KexAlgorithms +diffie-hellman-group1-sha1