如果我们的机器都是部署在公网环境下,那么无论使用哪种工具都可以很轻松的登陆进去。但是为了内网环境的安全,在没有接入VPN的情况下,内网下的机器均是无法通过外网直接访问的,这时对于我们运维管理来说就会比较麻烦。
以阿里云VPC环境为例,虽然我们可以通过数据管理 DMS
在WEB端登入内网机器,但这毕竟不够方便,没有哪个运维希望自己一直通过网页才能操作机器,所以我们需要想办法通过XShell
等工具解决这个问题。
考虑到我们往往是有一台暴露在公网下的网关,所以我们可以将其当做跳板。一般有两种方案可以实现:
iptables
配置端口转发。ssh
从网关机器间接登录。首先需要开启网关机器的转发功能,如已开启则无需再次设置。
vi /etc/sysctl.conf
# 确保文件中存在配置 net.ipv4.ip_forward=1
# 然后重载配置文件使转发功能生效
sysctl -p
然后通过 iptables
设置端口转发:
# iptables -t nat -A PREROUTING -p tcp -m tcp --dport [网关端口号] -j DNAT --to-destination [内网服务器IP]:[内网服务器端口号]
# 以下为例子
# 假设: (以下均为本文假设的地址,并无实际意义)
# 网关机器地址为 172.16.1.1 内网服务器地址为 172.16.1.10
# 网关公网地址为 34.56.78.90
# 网关监听端口为 1022 内网服务器SSH端口为 22
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1022 -j DNAT --to-destination 172.16.1.10:22
通过以上简单步骤,就可以方便的通过XShell
等工具使用SSH方式登陆34.56.78.90
,当端口号为22
时访问的就是网关本身,而当端口号为1022
时即表示访问的是内网172.16.1.10
的机器。
利用端口转发可以将登陆信息保存在本地软件中,方便下次登录使用,但这种方式同时也意味着将内网中的机器开放了一个口子。为了保证内网环境的绝对安全,我们也可以尝试在登陆网关后,通过在网关机器上使用ssh
命令,间接访问内网机器。
这种方式之所以更安全,就是因为我们访问内网机器时,我们使用的地址均为内网IP地址,与外部毫无关系。
ssh
命令并不复杂,我们使用 ssh -h
可查看其参数。
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
一个简单的登陆示例如下:
# 使用与当前机器相同的用户名登陆到远程机器 172.16.1.10
ssh 172.16.1.10
# 使用指定的用户名(如 foo) 登陆到远程机器 172.16.1.10
ssh foo@172.16.1.10
# 使用指定的用户名(如 foo) 登陆到远程机器 172.16.1.10 且远程机器ssh端口号为 10022
ssh -p 10022 foo@172.16.1.10
这些示例均为使用帐号+密码方式登陆,实际上帐号密码方式已经不够安全,我们在阿里云的机器往往也是使用密钥对登陆的,我们通过在XShell
中导入用户密钥
可以便捷的完成密钥对的配置用来登陆,那么在网关机器上,我们又该如何配置?
其实也很简单,我们只需将.pem
格式的私钥文件的内容上传到网关机器的本地文件夹中,如/var/keys/KEY.pem
(文件地址仅为示例,请自行决定文件位置。),我们使用密钥方式进行ssh
登录时,使用的就是这个文件。文件上传后,那么我们再进行登录,示例将变成如下所示:
# 使用指定的用户名(如 foo) 登陆到远程机器 172.16.1.10 且远程机器ssh端口号为 10022,登陆时使用私钥文件 /var/keys/KEY.pem 代替密码
ssh -i /var/keys/KEY.pem -p 10022 foo@172.16.10.1
为了让自己的集群环境更加安全,建议大家使用第二种方法管理内网集群,对于想要使集群更进一步安全的用户来说,也可以深入了解一下堡垒机的概念。