B의 개인 키를 사용하여 A에서 B에서 C로 SSH .C의 공개 키와

로컬 컴퓨터 A에서 프록시 B를 통해 대상 호스트 C로 SSH하는 간단한 방법을 찾고 있습니다 .C의 공개 키와 함께 제공되는 개인 키는 B에 있으며, 로컬 컴퓨터에 해당 키를 넣습니다. 팁이 있습니까?

또한 ~ / .ssh / config를 사용 하여이 작업을 수행하고 싶습니다.

감사!



답변

개략도:

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

전제 조건 :

  • A ssh-agent를 실행 중입니다.
  • A접근 할 수 있습니다 B;
  • B접근 할 수 있습니다 C;
  • A의 ssh 공개 키가 B:~/.ssh/authorized_keys
  • B의 ssh 공개 키가 C:~/.ssh/authorized_keys

~/.ssh/configA추가

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

B의 ssh 개인 키가 비표준 위치에 있으면 뒤에 경로를 추가하십시오 ssh-add.

이제 액세스 할 수 있어야 C에서 A:

A$ ssh C
C$

답변

다음이 작동하는지 확인하십시오.

ssh -t B ssh C

B에 저장된 키를 사용하려면 다음 명령을 사용하십시오.

ssh -t B ssh -i /path/to/identity_on_B C

여기서는 ssh -i /path/to/identity_on_B C로그인 쉘 대신 B에서 실행될 명령을 지정 합니다.


답변

나는 지금 이것을 해결했다. 여기에 해결책이 있습니다. 나는 그것을 더 빨리 보았어야했다.

~ / .ssh / config :

Host B
  HostName 1.2.3.4
  User myuser
  IdentityFile ~/.ssh/rsa_key
  ControlMaster auto
  ControlPath ~/.ssh/socket/master-%l-%r@%h:%p

Host C.*
  User customer_username
  Port customer_port
  IdentityFile remote/path/to/ssh/key
  ForwardAgent yes
  ProxyCommand ssh accessable.server nc %h %p

Host C.server-1
  HostName 2.3.4.5

‘B’는 뛰어 넘는 프록시 서버입니다. 일반적으로 서버에 대한 액세스를 구성 할 때와 같이 구성해야합니다.

‘C’는 대상 호스트입니다. 연결 프로세스에서 ‘B’를 사용하도록 구성해야합니다. ‘C’의 ID 파일은 ‘B’의 ssh 키 경로입니다. ProxyCommand는 Netcat을 사용하여 ‘B’에서 ‘C’에 대한 연결을 엽니 다. Netcat 또는 nc는 ‘B’에 설치해야합니다.

이것이 다른 사람들을 돕기를 바랍니다.


답변

기본적으로 원격 인스턴스에 내 ssh 키를 나열하고 선택한 ssh 키를 로컬 ssh 에이전트에 추가하는 간단한 스크립트를 작성했습니다. 이것은 매우 깨끗하지는 않지만 모든 키를 로컬이 아닌 원격 위치에 유지할 수 있습니다.

관심있는 사람이 있으면 다음 스크립트를 작성하십시오.

#!/usr/bin/ruby

require "rubygems"
require "fileutils"

# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/  /g' | sed     's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list

# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp

# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0

답변

#!/usr/bin/env bash
target_host=10.121.77.16
target_port=22
target_user=vagrant

bastion_user=yourusername
bastion_host=10.23.85.245
bastion_port=32780

scp -P $target_port -o ProxyCommand="ssh -o 'ForwardAgent yes' $bastion_user@$bastion_host -p $bastion_port 'ssh-add ~/.ssh/*.rsa && nc %h %p'" /tmp/x.txt $target_user@$target_host:/tmp/

답변

할 것:

ssh someuser@IP_D

그런

A -> B-> C -> D 여기서 A는 현재 호스트입니다.

로컬 ~ / .ssh / config를 다음과 같이 편집하십시오.

Host IP_D
  ProxyCommand ssh -o 'ForwardAgent yes' userX@IP_C 'ssh-add && nc %h %p'
Host IP_C
  ProxyCommand ssh -o 'ForwardAgent yes' userY@IP_B 'ssh-add && nc %h %p'

이 답변은 선택한 답변을 기반으로합니다. 다양한 사용자가 전체 시나리오에 어떻게 적용되는지 파악해야했습니다.

이것은 나를 위해 작동합니다. HTH.


답변

눈덩이의 대답 은 많은 도움이되었습니다. 그러나 명령을 수정하고 작동 방식을 설명하고 싶었습니다. 이 상황이 주어지면 :

    ssh        ssh
A -------> B -------> C
     ^          ^
  using A's  using B's
  ssh key    ssh key

일반적으로 호스트를 구성하는 방법으로 ~/.ssh/config파일을 수정 B하고 이동하려는 호스트 를 추가하십시오 .

Host B
 User myusername
 HostName b.mycompany.com

그런 다음 C끝낼 호스트를 추가하십시오 .

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

을 참고 ProxyCommand, 여기서

  • ssh -T -q의사 TTY ( -T)를 할당하지 말고 조용히 해야 함을 나타냅니다 ( -q).
  • 일단 점프 호스트에서 B, 우리는 A통해 SSH 키에 키를 추가합니다 ssh-add;
  • 우리는를 사용하여 SSH 에이전트를 전달했기 때문에 작동합니다 -o 'ForwardAgent yes'.
  • ssh-add -t 1 최종 호스트 C에 인증하는 데 필요한 1 초 동안 만 키를 추가하고 싶다는 것을 나타냅니다.
  • 마지막으로 포트에서 최종 호스트 에 nc %h %p대한 netcat연결을 시작합니다 (둘 다 파일 의 정보를 기반으로 SSH로 채워짐 ).%h%p~/.ssh/config

B사용할 사용자 정의 키를 지정해야하는 경우 ssh-add파트 를 수정하여이를 수행 할 수 있습니다 .

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'