로컬 컴퓨터 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/config
에 A
추가
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'