server1의 자격 증명을 사용하여 server1을 통해 server2로 SSH 연결

server1의 자격 증명을 사용하여 server1을 통해 server2로 SSH 연결

server1두 개의 서버 가 있고 다음을 통해 연결할 server2수 있습니다 .server2server1

localUser@localMachine $ ssh user1@server1
user1@server1 $ ssh user2@server2
user2@server2 $

다음을 사용하여 한 단계로 이 작업을 수행할 수 있습니다.

localUser@localMachine $ ssh -t user1@server1 ssh user2@server2
user2@server2 $

ssh server2내 로컬 컴퓨터에서 간단히 실행하고 직접 연결할 수 있기를 원합니다 . 위 명령을 별칭으로 설정할 수도 있지만 via 를 선호합니다 ~/.ssh/config. 문제는 server2에 연결할 때 server1에 있는 SSH 자격 증명을 사용해야 하는데 이를 내 로컬 컴퓨터에 복사하고 싶지 않다는 것입니다. 이는 이 기능을 설정하는 "일반적인" 방법(local 에 다음을 추가하여 ~/.ssh/config)이 실패함을 의미합니다.

Host server1
    Hostname  server1.example.com
    User      user1

Host server2
    Hostname  server2.example.com
    User      user2
    ProxyJump server1

지금 연결하려고 하면 다음과 같은 결과가 나타납니다.

$ ssh server2
[email protected]: Permission denied (publickey).

~/.ssh/id_rsa_pub로컬 컴퓨터가 아닌 로컬 컴퓨터 의 키를 사용해야 하기 때문입니다 server1. 그렇다면 에 존재하는 자격 증명을 사용하여 로컬 장치 를 통과 하고 연결하도록 ~/.ssh/config로컬 장치를 어떻게 설정합니까 ?server2server1server1

모든 컴퓨터는 Linux 컴퓨터이고, 원격 컴퓨터는 Ubuntu Server 18.04.4를 실행하고 있으며, 내 로컬 컴퓨터는 Arch Linux를 실행하고 있습니다.


나는 Hauke의 답변에 제공된 솔루션을 시도하고 다음을 추가했습니다 ~/.ssh/config.

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh [email protected]

이것거의일하다! 이제 를 server2사용 하여 연결할 수 있지만 ssh server1server2프롬프트가 표시되지 않습니다.

localUser@localMachine $ ssh server1server2 
Pseudo-terminal will not be allocated because stdin is not a terminal.

hostname
server2

위에서 볼 수 있듯이 거기에 연결되어 server2있고 거기에서 명령을 실행할 수도 있지만 프롬프트가 표시되지 않습니다. 그런 다음 구성 파일 -t -t에 명령을 추가해 보았습니다 .ssh

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh -t -t [email protected]

이것은 나에게 힌트를 주지만 쉘의 초기화 파일을 읽지 못하고 Ctrl+를 누르면 연결이 C끊어집니다 . server1 에서 수행하는 작업과 정확히 동일 ssh하게 작동해야 합니다 . 이는 일반 쉘 초기화 파일을 읽어야 하며 Ctrl+C가 세션을 종료해서는 안 된다는 것을 의미합니다.ssh user2@server1ssh user2@server2

답변1

SSH 구성을 통해 대상에서 명령을 실행하는 데는 최소한 두 가지 가능성이 있습니다.

  • 원격 명령
  • 단일 공개 키command="command"

그래서

Host server1server2
    Hostname server1
    RemoteCommand ssh user2@server2

또는

Host server1server2
    Hostname server1
    IdentityFile ~/.ssh/id_ecdsa_force_command

그런 다음ssh server1server2

답변2

@αГsнιе가 나에게 지적해주었다.https://serverfault.com/q/337274/155817댓글에서 이를 기반으로 로컬 파일에서 다음 줄을 사용하여 작동하도록 했습니다 ~/.ssh/config.

Host server2
    Hostname server2.example.com
    User user2
    ProxyCommand ssh -o 'ForwardAgent yes' server1  'ssh-add && nc %h %p'

이제 다음과 직접 연결할 수 있습니다.

$ ssh server2
Identity added: /home/user1/.ssh/id_rsa (/home/user1/.ssh/id_rsa)

위 메시지는 ssh-addserver1의 내 ID를 server2에서 실행되는 인증 브로커에 추가함으로써 발생합니다. 그러나 이는 문제가 되지 않습니다.

관련 정보