OpenSSH 客户端配置简介
这篇文章主要讲了 OpenSSH 基本配置和常见应用,包括复用链接、简化链接命令、多个 git server 配置等。
配置文件
SSH 客户端可在通过配置文件和命令行指定的方式应用。
共有两个配置文件,分别为 /etc/ssh/ssh_config 和 ~/.ssh/config。
前者是系统配置文件,对所有用户;后者是用户配置问卷,针对当前用户。
用户配置文件会覆盖系统配置文件,命令行指定配置会覆盖其他配置。
参数格式
每一行指定一个配置项,但 # 开头的行和空行会被忽略。
可按 参数名 值 的格式进行配置,也可以按照 参数名 = 值 的方式配置,可以使用 " 包含空格等。
命令行使用 -o 指定参数。所有的值区分大小写,但参数名不区分。
config value
config value1 value2
config=value
config=value1 value2
一个脚本中使用命令行传参的例子:
ssh -o ConnectTimeout=2 -o BatchMode=yes -n $host 'command'
可选参数
Host
Host 指定一个配置,两个 host 参数直接可选下拉参数
Host name # 定义一个配置,可以使用 * 匹配默认配置
HostName hostname # 主机名
User username # 用户名
IdentityFile /file/path # 认证文件路径
BatchMode yes # 设置为 yes 关闭 passphrase/password 检测,遇到询问自动失败,一般用在批处理脚本中
BindAddress IP # 使用特定 IP 地址连接,UsePrivilegedPort=yes 时失效。
ControlMaster auto # 复用链接
ControlPath ~/.ssh/master-%r@%h:%p # 复用链接 TCP 套接字存储位置
应用
加速 OpenSSH,减少系统资源消耗
开启 ControlMaster 后,一个 ssh 连接在后台运行, 创建一个本地套接字( ControlPath 就是这个套接字的名字), 以后本地再有 ssh 需要连接到远端同样的主机的时候, 直接使用这个已经创建好的 socket 文件进行连接, 不用再创建连接了,也不需要再进行用户身份验证。
Host *
ControlMaster yes
ControlPath ~/.ssh/master-%r@%h:%p
# %r - 用户名
# %h - 远程主机 IP
# %p - 端口
简化连接
默认情况下,使用 ssh 连接服务器使用 ssh username@servername 命令,这时会默认使用 ~/.ssh/id_rsa 这个密钥。
如果想使用不同的密钥则和端口,需用到以下命令:
ssh -i path/to/key -p 2222 username@servername
如果不想每次都指定这些密钥、用户名、端口、服务器地址的话,可以采用如下配置:
Host servername
HostName servername
User username
IdentifyFile path/to/id_rsa
Port 2222
这样就可以简单的使用 ssh servername 命令登录啦~
配置多个 git remote server
我有多个 git 账号,分别是 GitHub 和公司的 GitLab。通过配置 ssh 的方式,就能使用两个密钥分别登录两个服务器了:
Host github
HostName github.com
User git
IdentityFile /github/key/path
Host gitlab
HostName git.xx.com
User git
IdentityFile /gitlab/key/path
使用 git clone 时就用如下命令:
git clone github:llissery/repo-name.git
git clone gitlab:liyuanyuan/repo-name.git