1.30. 使用OpenSSH远程管理Linux服务器

1.30.1. 1. 使用 SSH 实现端口转发

可以将本地主机端口上的流量转发到另一台主机上,也可以将远程主机端口上的流量转发到其他主机。

1.交互式shell中

在进行端口转发的过程中,这个shell必须保持打开状态,什么时候想停止转发,只需要退出该shell就可以了。

(1) 下列命令会将本地主机端口8000上的流量转发到www.kernel.org的端口80上:
ssh -L 8000:www.kernel.org:80 user@localhost
将上述命令中的 user 替换成你自己的本地主机上的用户名。


(2) 下列命令会将远程主机端口8000上的流量转发到www.kernel.org的端口80上:
ssh -L 8000:www.kernel.org:80 user@REMOTE_MACHINE
将上述命令中的 REMOTE_MACHINE 替换成远程主机的主机名或IP地址,将 user 替换成使用SSH进行访问的用户名。

2.非交互式shell中

在使用非交互模式或者反向端口转发时,端口转发能够发挥更大的作用。

1. 非交互式端口转发
如果你只是想设置端口转发,而不希望在端口转发时有一个总是保持打开状态的shell,那么
可以像下面这样使用 ssh :
ssh -fL8000:www.kernel.org:80 user@localhost -N
-f 指定 ssh 在执行命令前转入后台运行, -N 告诉 ssh 无需执行命令,只进行端口转发。

3.反向端口转发

反向端口转发是SSH最强大的特性之一。如果你有一台无法通过Internet访问到的主机,但是又希望其他用户可以访问这台主机上的服务,那就是反向端口转发大显身手的时候了。如果你能
够使用SSH访问一台可以通过Internet访问的远程主机,那么就可以在这台主机上设置反向端口转
发,将流量转发到运行该服务的本地主机。



ssh -R 8000:localhost:80 user@REMOTE_MACHINE
上述命令会将远程主机端口8000上的流量转发到本地主机的端口80上。和之前一样,别忘了把REMOTE_MACHINE 替换成远程主机的主机名或IP地址。


利用这种方法,如果你在远程主机上浏览http://localhost:8000,那么实际连接的是运行在本
地主机端口80上的Web服务器。

1.30.2. 2.SSH 配置详解

作为Linux系统管理员,没有人不知道OpenSSH的,SSH采用了密文的形式在网络中传输数据,实现了更高的安全级别,是Telnet服务的安全替代品,sshd是OpenSSH 的服务器端守护进程,而与之对应的Windows下客户端软件有很多,常用的有SecureCRT、Xshell、PuTTY等。通过SecureCRT远程连接Linux系统,不受网络速度和带宽的影响,无论你是光纤上网还是宽带拨号上网,都能轻松连接,操作维护方便。SecureCRT 的使用在前面章节已经有介绍,这里详细介绍OpenSSH服务器端程序的配置。

OpenSSH在CentOS Linux发行版本中是默认安装的,一般的安装目录为/etc/ssh,对应的服务器配置文件为/etc/ssh/sshd_config。这里以CentOS 7.1版本为例,重点讲述sshd_config这个配置文件中每个选项的含义。远程ssh登录Linux系统时,这个选项建议设置为“no”)

 [root@localhost ~]# vi /etc/ssh/sshd_config

 [root@localhost ~]# vi /etc/ssh/sshd_config
("Port"用来设置sshd监听的端口,如果不做修改,默认是22端口)
#Port  22
 ("ListenAddress"用来设置sshd服务器绑定的IP地址,不需要做特殊设置,保持默认)
#ListenAddress  0.0.0.0
(设置使用的SSH协议,默认为SSH2,其实可用的协议还有SSH1,不过SSH1安全度很低,已经基本不用了)
#Protocol  2

("HostKey"用来设置服务器密匙文件的路径,保持默认即可)
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

("KeyRegenerationInterval"用来设置在多少秒之后系统自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止利用盗用的密匙解密被截获的信息)
#KeyRegenerationInterval  1h

("ServerKeyBits"用来定义服务器密匙的长度,默认为1024位)
#ServerKeyBits  1024

("SyslogFacility"用来设定在记录来自sshd的消息的时候,是否给出"facility code")
SyslogFacility  AUTHPRIV
#LogLevel  INFO

("LogLevel"用来记录sshd日志消息的级别)
#LoginGraceTime  2m

("LoginGraceTime"用来设置如果用户登录失败,在切断连接前服务器需要等待的时间,以秒为单位)
PermitRootLogin  no
("PermitRootLogin"用来设置超级用户root能不能用SSH登录。root远程登录Linux是很危险的,因此在
#StrictModes  yes

("StrictModes"用来设置SSH在接收登录请求之前是否检查用户根目录和rhosts文件的权限和所有权。此选项建议设置为"yes")
#RSAAuthentication  yes

("RSAAuthentication"用来设置是否开启RAS密钥验证,如果采用RAS密钥登录方式时,开启此选项)
#PubkeyAuthentication  yes
("PubkeyAuthentication"用来设置是否开启公钥验证,如果采用公钥验证方式登录时,开启此选项)
AuthorizedKeysFile     .ssh/authorized_keys

("AuthorizedKeysFile"用来设置公钥验证文件的路径,与"PubkeyAuthentication"配合使用)
#HostbasedAuthentication  no

("IgnoreUserKnownHosts"用来设置 SSH 在进行 RhostsRSAAuthentication 安全验证时是否忽略用户的
"$HOME/.ssh/known_hosts"文件)
#IgnoreUserKnownHosts  no

("IgnoreRhosts"用来设置验证的时候是否使用"~/.rhosts"和"~/.shosts"文件)
#IgnoreRhosts  yes

("PasswordAuthentication"用来设置是否开启密码验证机制,如果是用密码登录系统,请设置为"yes")
PasswordAuthentication  yes

("PermitEmptyPasswords"用来设置是否允许用密码为空的账号登录系统,肯定是"no"了)
PermitEmptyPasswords  no

("X11Forwarding"用来设置是否允许X11转发)
X11Forwarding  yes

("PrintMotd"用来设置sshd是否在用户登录的时候显示"/etc/motd"中的信息)
#PrintMotd  yes

上面括弧中的内容为注释,是对sshd_config配置文件每个选项含义的解释,这里仅仅列出最常用的一些选项,也是我们给出的推荐配置。

对sshd_config文件配置完毕,接着重启sshd守护进程,使修改生效。

[root@localhost ~]# systemctl  restart sshd

最后一步是设置sshd服务开机自动启动,只需执行如下命令即可。

[root@localhost ~]# systemctl  enable sshd

这样sshd服务会在系统运行级“multi-user”下自动启动。