【翻译】OpenSSH Client 配置指南

一个局部或者全局的ssh配置能够加速你通过访问ssh server的速度,能够为你的ssh client定制快捷登录方式。让我们来一起看一下openssh的配置例子吧。

系统级别的openssh client配置

1.0 /etc/ssh/ssh_config: 这个文件是ssh client连接ssh server使用的配置,做个文件的权限必须是所有用户都能读取的。

用户级别的ssh client配置

1.0 $HOME/.ssh/config: 这个是对当前用户有效的ssh client的配置,它能够覆盖全局的ssh client配置。

~/.ssh/config规则

此文件配置规则如下:

  • 每一行一条配置信息,分别对应的是配置项的名字和对应的值,语法如下:

    1
    2
    config value
    config1 value1 value2
  • 你也可以使用等于号来替代上面的空格

    1
    2
    config=value
    config1=value1 value2
  • 空行会被忽略

  • #符号开头的行会被忽略
  • 配置项参数名字不区分大小写,但是配置项的值严格区分大小写

一个小技巧:如果你从来没有使用过ssh命令,没有生成~/.ssh文件夹,你可以使用命令手动创建他,mkdir -p $HOME/.ssh && chmod 0700 $HOME/.ssh

例子

我们接下来的例子配置如下:

  • 本地客户端是MAC OSX或者ubunutu linux
  • 远程服务端是unix-OpenBSD或者其他运行最新版本OpenSSH server的服务器
  • 远程的OpenSSH server的地址是: 75.126.153.206
  • 远程的OpenSSH server的端口是: 4242
  • 本地私钥文件的地址是: /nfs/shared/users/nixcraft/keys/server1/id_rsa

基于以上条件,我们的ssh登录命令如下:

1
ssh -i /nfs/shared/users/nixcraft/keys/server1/id_rsa -p 4242 nixcraft@server1.cyberciti.biz

或者是

1
ssh -i /nfs/shared/users/nixcraft/keys/server1/id_rsa -p 4242 -l nixcraft server1.cyberciti.biz

每次登录都要敲这么长的命令,是无法接受的。

要避免这种情况,需要配置本地ssh client的配置文件~/.ssh/config

1
vi ~/.ssh/config

或者

1
vi $HOME/.ssh/config

对于登录每一台服务器的配置,我们添加如下配置文件

1
2
3
4
5
Host server1
HostName server1.cyberciti.biz
User nixcraft
Port 4242
IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa

这个时候我们连接server1.cyberciti.biz服务器只需要在终端输入:

1
ssh server1

添加其他机器

加入配置到~/.ssh.config文件中:

1
2
3
4
Host nas01
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/nas01.key

快速的登录:

1
ssh nas01

我的ssh client配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
### default for all ##
Host *
ForwardAgent no
ForwardX11 no
ForwardX11Trusted yes
User nixcraft
Port 22
Protocol 2
ServerAliveInterval 60
ServerAliveCountMax 30

## override as per host ##
Host server1
HostName server1.cyberciti.biz
User nixcraft
Port 4242
IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa

## Home nas server ##
Host nas01
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/nas01.key

## Login AWS Cloud ##
Host aws.apache
HostName 1.2.3.4
User wwwdata
IdentityFile ~/.ssh/aws.apache.key

## Login to internal lan server at 192.168.0.251 via our public uk office ssh based gateway using ##
## $ ssh uk.gw.lan ##
Host uk.gw.lan uk.lan
HostName 192.168.0.251
User nixcraft
ProxyCommand ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null

## Our Us Proxy Server ##
## Forward all local port 3128 traffic to port 3128 on the remote vps1.cyberciti.biz server ##
## $ ssh -f -N proxyus ##
Host proxyus
HostName vps1.cyberciti.biz
User breakfree
IdentityFile ~/.ssh/vps1.cyberciti.biz.key
LocalForward 3128 127.0.0.1:3128

理解~/.ssh/config文件的配置

  • Host: 定义远程服务器的匹配默认,如果匹配成功,那么使用该选项的配置来登录服务器。*符号能匹配所有的服务器,可以认为针对所有服务器的全局配置。
  • HostName: 登录机器的域名或者是特定的ip地址
  • User: 当前登录ssh的用户名
  • IdentityFile: 当前登录ssh使用的私钥文件,对于ssh协议的第一版是默认是~/.ssh/identity,在第二版本ssh协议中是~/.ssh/id_dsa文件
  • ProxyCommand: 这是在目标机器上执行的条命令,%h表示远程机器的地址,%p表示远程机器的ssh端口号,%r表登录远程机器的用户名,这个命令一般被用当做跳板机器的跳转,这个功能功能通常和nc命令一起配置使用,例如:如下指令能够连接HTTP proxy
    1
    ProxyCommand /usr/bin/nc -X connect -x 192.1.0.253:3128 %h %p

LocalForward: 他是用来安全转发流量,连接一个特殊端口,第一个参数是本地绑定的地址,第二个参数是ip和地址

  • Port: 远程ssh server的端口号

LocalForward: ssh协议的版本号码,必须是1或者是2
ServerAliveInterval: 设置ssh连接的超时时间紧
ServerAliveCountMax: 设置ssh的最大活跃连接数

加速ssh session

opensssh等在一个tcp连接上创建多个ssh同道,这个减少tcp创建的次数,更新本地~/.ssh/config

1
2
3
4
Host server1
HostName server1.cyberciti.biz
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlMaster auto

参考https://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-multiplexing-to-speed-up-ssh-connections/
,https://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/

aliases配置

你可以创建bash的alias,这样登录的方式更加简单,当然,这一切都是基于前面的配置

1
2
## create a new bash shell alias as follow ## 
alias server1="ssh -i /nfs/shared/users/nixcraft/keys/server1/id_rsa -p 4242 nixcraft@server1.cyberciti.biz"

这样使用server1就能登录服务了。

原文地址: https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/