node1
NAT 뒤에 있는 노드에 액세스하기 위해 역방향 SSH 터널을 설정했습니다. myEC2
중개자 역할을 하도록 EC2 인스턴스를 설정했습니다 . 내 관점에서는 laptop
액세스를 원할 때 node1
EC2에 SSH를 연결한 다음 노드에 SSH를 연결해야 합니다.
워크플로는 다음과 같습니다.
- 에서
node1
다음을 실행해야 합니다ssh -i key.pem -R 3000:localhost:22 ubuntu@myEC2
. 이는 항상 서비스 내에서 실행됩니다. - 내
laptop
SSH에서 EC2로:ssh ubuntu@myEC2
- EC2에 들어간 후:
ssh xavier@localhost -p 3000
- 나도 끼워 줘
node1
!
node1
내 장치에서 직접 로그인 하는 데 사용할 수 있는 SSH 구성에서 이 워크플로를 표현하는 방법을 찾고 있습니다.laptop
. 이렇게 하면 node1
Visual 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
을 주시면 대단히 감사하겠습니다. 이것이 -v
SSH에 플래그를 추가하여 얻은 결과입니다.
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
사용할 수 있습니다 .Host
myEC2