로컬 컴퓨터 A에서 프록시 B를 통해 대상 호스트 C로 SSH하는 간단한 방법을 찾고 있습니다 .C의 공개 키와 함께 제공되는 개인 키는 B에 있으며, 로컬 컴퓨터에 해당 키를 넣습니다. 팁이 있습니까?
또한 ~ / .ssh / config를 사용 하여이 작업을 수행하고 싶습니다.
감사!
로컬 컴퓨터 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$
nc
됩니까?
ForwardAgent yes
전에 추가 해야 합니다 ProxyJump
.
다음이 작동하는지 확인하십시오.
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
;-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'