Erik's Blog

OpenSSH 客户端配置简介

(更新于 )Linux#SSH

这篇文章主要讲了 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

参考资料