我的问题是:如何使用 ubuntu 实例在 AWS 上为 ssh 设置堡垒主机?
我可以成功执行以下操作:
root@e183d80cdabc# ssh -J [email protected] [email protected]
Last login: Sat Sep 4 13:14:17 2021 from 10.240.0.30
==> SUCCESS! ==> ubuntu@ip-10-240-0-20:~$
但是当我尝试 ~/.ssh/config 文件方法时失败了。使用的命令:
# ssh 10.240.0.20
# ssh [email protected]
# ssh -i ~/.ssh/id_rsa [email protected]
ssh: connect to host 10.240.0.20 port 22: Connection refused
我的 ~/.ssh/config 如下所示:
root@e183d80cdabc# cat $HOME/.ssh/config
Host bastion
HostName 54.170.186.144
Host remote
HostName 10.240.0.20
ProxyJump bastion
我在 AWS 上运行 ubuntu 如下:
ubuntu@ip-10-240-0-30:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
我尝试添加该User ubuntu
字段,但没有帮助。
我的/etc/ssh/ssh_config
服务器如下所示:
Host *
ForwardX11Trusted yes
IdentityFile ~/.ssh/id_rsa
Port 22
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
更新 我现在使用详细选项,即
root@e183d80cdabc# ssh -vvv 10.240.0.20
OpenSSH_8.2p1 Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f 31 Mar 2020
debug1: Reading configuration data /root/.ssh/config
debug1: /root/.ssh/config line 2: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname 10.240.0.20 is address
debug2: ssh_connect_direct
debug1: Connecting to 10.240.0.20 [10.240.0.20] port 22.
debug1: connect to address 10.240.0.20 port 22: Connection refused
ssh: connect to host 10.240.0.20 port 22: Connection refused
它似乎没有使用任何跳跃主机(即它跳过堡垒)并且直接前进,并且失败。
非常感谢您的任何想法!谢谢
=========================================================
更新:2021-09-04-15-44 - 附解决方案 谢谢大家,我已在下面标记为答案。
正确的配置不使用 HostName,因为匹配是在主持人。我还能够在 IP 地址中包含通配符,这正是我真正想要的。
ssh 配置
root@e183d80cdabc# cat $HOME/.ssh/config
Host bastion
HostName 63.33.206.201
User ubuntu
Host 10.240.0.*
ProxyJump bastion
User ubuntu
和瞧!
# ssh 10.240.0.20
...
ubuntu@ip-10-240-0-20:~$
答案1
匹配是在Host
节上完成的,而不是在上完成的HostName
。
尝试:
ssh ubuntu@remote
答案2
命令行之间的区别
ssh -J [email protected] [email protected]
以及我建议你做什么来参考你的配置
ssh remote
后者既没有 IP,也没有在两台机器上登录的用户在命令行中 - 你必须编辑你的 ssh 配置以包含全部您不再通过命令行传递的信息:
# $HOME/.ssh/config
### The Bastion Host
Host bastion
HostName 54.170.186.144
User ubuntu
### The Remote Host
Host remote
HostName 10.240.0.20
User ubuntu
ProxyJump bastion
更新:虽然是的,理论上你能配置你的Host
节以匹配 IP 地址,我建议反对这样做。
如果主机不能通过某个 IP 地址直接到达,则应通过姓名- 试想一下,当您将相同的(私有)IP 空间分配给多个主机时会发生什么,您不可能为每个主机分配正确的 ProxyJump 配置。
使用地址来指代主机不利的另一个原因是主机可通过多个地址系列访问:如果主机可通过 IPv4 和 IPv6 访问,您可能希望您的 ssh 连接保持与协议无关,并且仅在您真正想要限制(自动)选择时才添加标志。