역방향 SSH 터널을 통해 호스트에 연결하기 위한 SSH 구성

역방향 SSH 터널을 통해 호스트에 연결하기 위한 SSH 구성

node1NAT 뒤에 있는 노드에 액세스하기 위해 역방향 SSH 터널을 설정했습니다. myEC2중개자 역할을 하도록 EC2 인스턴스를 설정했습니다 . 내 관점에서는 laptop액세스를 원할 때 node1EC2에 SSH를 연결한 다음 노드에 SSH를 연결해야 합니다.

워크플로는 다음과 같습니다.

  1. 에서 node1다음을 실행해야 합니다 ssh -i key.pem -R 3000:localhost:22 ubuntu@myEC2. 이는 항상 서비스 내에서 실행됩니다.
  2. laptopSSH에서 EC2로:ssh ubuntu@myEC2
  3. EC2에 들어간 후:ssh xavier@localhost -p 3000
  4. 나도 끼워 줘 node1!

node1내 장치에서 직접 로그인 하는 데 사용할 수 있는 SSH 구성에서 이 워크플로를 표현하는 방법을 찾고 있습니다.laptop. 이렇게 하면 node1Visual Studio Code용 원격 SSH 확장을 통해 액세스하는 데 도움이 됩니다 .

나는 다음과 같은 것을 시도했습니다 :

Host node1
Hostname myEC2
User ubuntu
Port 3000
IdentityFile key.pem

그런데 안 되는 게, Port그래야만 22하고 안 되기 때문인 것 같아요 3000. 워크플로를 어떻게 표현해야 할지 모르겠습니다. 조사해 보았지만 ProxyJump이것이 내가 찾고 있는 것인지 확실하지 않으며 솔직히 말해서 성공하지 못했습니다.

어떤 제안이라도 환영합니다! =디


편집 #1:Stéphane의 조언을 따른 후 다음과 같은 ssh_config 파일을 얻었습니다.

Host myEC2
Hostname <myEC2_IP>
User ubuntu
Port 22
IdentityFile ec2_key.pem

Host node1
Hostname localhost
User xavier
Port 3000
IdentityFile /path/to/node1-id_rsa
ProxyJump ubuntu@myEC2

myEC2아무 문제 없이 SSH에 접속할 수는 없습니다 . node1도움 ssh -p 3000 -J ubuntu@myEC2 xavier@localhost을 주시면 대단히 감사하겠습니다. 이것이 -vSSH에 플래그를 추가하여 얻은 결과입니다.

xaviermerino@Xaviers-MBP .ssh % ssh doc
debug1: Executing proxy command: exec ssh -l ubuntu -W '[localhost]:3000' myEC2
debug1: identity file node1-id_rsa type -1
debug1: identity file node1-id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1
debug1: Connecting to myEC2 [myEC2_IP_ADDRESS] port 22.
debug1: Connection established.
debug1: identity file ec2_key.pem type -1
debug1: identity file ec2_key.pem-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.2p1 Ubuntu-4ubuntu0.2
debug1: match: OpenSSH_8.2p1 Ubuntu-4ubuntu0.2 pat OpenSSH* compat 0x04000000
debug1: Authenticating to myEC2_IP_ADDRESS:22 as 'ubuntu'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:/U4HE+zUBFNZJgxDM6lWDW7FX8GSHXWYc/fMEyOvMlw
debug1: Host 'myEC2_IP_ADDRESS' is known and matches the ECDSA host key.
debug1: Found key in /Users/xaviermerino/.ssh/known_hosts:226
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: ec2_key.pem  explicit
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,[email protected],ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected]>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: ec2_key.pem
debug1: Authentication succeeded (publickey).
Authenticated to myEC2 ([IP_Address_Goes_Here]:22).
debug1: channel_connect_stdio_fwd localhost:3000
debug1: channel 0: new [stdio-forward]
debug1: getpeername failed: Bad file descriptor
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Remote: /home/ubuntu/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
channel 0: open failed: connect failed: Connection refused
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host

sshd_config이것이 무엇을 의미하는지 잘 모르겠습니다. 이것이 EC2의 설정과 관련이 있습니까? 이것이 내가 거기에 가지고 있는 것입니다:

#AllowAgentForwarding yes
#AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

편집 #2: 누군가 컴퓨터를 종료했습니다. 이제 괜찮아! 이 문제를 조사하는 사람들을 위해 요약합니다. 이 문제를 해결하려면 다음이 필요합니다.

Host myEC2
Hostname <myEC2_IP>
User ubuntu
Port 22
IdentityFile ec2_key.pem

Host node1
Hostname localhost
User xavier
Port 3000
IdentityFile /path/to/node1-id_rsa
ProxyJump ubuntu@myEC2

그게 다야! @StephaneChazelas 감사합니다

답변1

당신은 실제로 myEC2사용하고 있습니다점프 호스트.

node1다음 명령을 사용하여 노트북에서 SSH를 통해 연결할 수 있습니다 .

ssh -p 3000 -J ubuntu@myEC2 xavier@localhost

해당 ssh_config항목은 다음과 같습니다.

Host node1
Hostname localhost
User xavier
Port 3000
IdentityFile key.pem
ProxyJump ubuntu@myEC2

확인을 위한 것이 IdentityFile하나 있습니다 node1. 에 대해 하나를 지정하려면 다른 항목을 myEC2사용할 수 있습니다 .HostmyEC2

관련 정보