SSH 的那点事


SSH在服务器运维、计算机管理方面发挥着巨大作用,由于其安全性,在近些年基本已经完全替代了古老的的telnet。本文稍微收集了以下ssh的日常用法,也当作一个参考吧。

一、基本用法

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

常用法

  • ssh user@host
  • ssh user@host -p port
  • ssh -i identity_file host

二、服务配置

对于sshd服务的配置,个人偏好,一般会做这样的配置:

/etc/ssh/sshd_config

Port xxxx
Protocol 2
PermitRootLogin no

TCPKeepAlive yes
ClientAliveInterval 20

UseDNS no

一般会改掉默认的22号端口。

三、免密登录

免密登录是常用的功能,如果服务器比较多,每次输入密码会比较麻烦,常用的情况是,干脆不设置用户密码,直接生成一个密钥加到服务端,就可以实现免密登录。基本的流程是这样:

1. 先生成key

ssh-keygen -C user@xxxhost -f ~/.ssh/xxx

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in xxx.
Your public key has been saved in xxx.pub.
The key fingerprint is:
22:f2:8d:12:45:6f:39:63:43:b2:8b:d1:d0:18:a0:82 user@xxxhost
The key's randomart image is:
+--[ RSA 2048]----+
|..o+o .          |
|o .+.= .         |
|E . + O          |
|.  + + +         |
|  + o . S        |
|   + + .         |
|  . o .          |
|   .             |
|                 |
+-----------------+

在这里,会遇到让输入密码或者信息,直接回车即可。最终会在用户目录的~/.ssh/目录下生成xxxxxx.pub两个文件,前者是密钥,必须保存好,后者是公钥,需要放到服务器端的。如果不指定-f ~/.ssh/xxx,会默认存储为id_rsaid_rsa.pub,这里的rsa是生成key的算法,有兴趣的话,也可以指定不同的算法。

2. 安放公钥

xxx.pub复制到服务端用户目录的~/.ssh/authorized_keys文件里,这个文件必须是0600权限的,文件中的一行代表一个客户端的公钥。

四、客户端配置

客户端连接服务器,一般需要指定服务端的域名(或IP),端口(默认22),用户(默认当前用户),钥匙(默认id_rsa)。比如:

ssh user@host -p 1234 -i xxx

参数如果一多,是否会嫌麻烦?其实也很容易解决。只需要配置自己的~/.ssh/config文件即可。需要注意的是~/.ssh/config里文件的权限都是0600

~/.ssh/config里每一组服务器信息的格式如下:

Host host
  HostName host.domain.cn
  Port 1234
  User user
  IdentityFile ~/.ssh/xxx

现在,可以简单的使用ssh host就可以登录了,是不是很轻松?

在这里HostName可以是IP,也可以是域名。

五、与rsync

rsync是一个非常优秀的数据同步软件,可以配置成使用其专有的通道,也可以走ssh通道,如果进行了上述的服务端和客户端配置,将会非常轻松。