중간(배스천, 점프, 게이트웨이) 서버를 사용하여 원격 개인 호스트로 SSH를 통해 연결하고 싶습니다. 이 명령은 잘 작동합니다.
ssh gateway ssh private
이 ~/.ssh/config 설정을 사용하면 다음과 같습니다.
Host gateway
User gateway-user
HostName XX.XX.XX.XX
RequestTTY force
~/.ssh/config에서 이를 어떻게 구현할 수 있나요? 나는 행운을 빌어 ProxyCommand를 여러 번 반복해 보았습니다. 게이트웨이 호스트에 있는 ID 파일을 사용하여 개인 호스트에 액세스하고 싶습니다. 나는 다음을 할 수 있기를 원합니다:
ssh private
나는 여기에 설명된 기술을 알고 있지만 내 공개 키가 모든 개인 호스트에 있어야 하지만 나는 그것을 원하지 않습니다.
http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/
답변1
먼저, SSH를 통해 비공개로 연결할 수 있도록 게이트웨이에서 SSH 키를 구성합니다. 그런 다음 클라이언트에서 게이트웨이에서 인증하는 데 사용하는 별도의 개인/공개 키 쌍을 만듭니다. 예 ssh-keygen -t rsa -f id_gateway
.
그런 다음 게이트웨이에서 command=
authorized_keys 파일의 구문을 사용하십시오. 예를 들어 항목은 다음과 같습니다.
command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....
command="command"
자세한 내용은 sshd 맨페이지를 검색하세요 . 이 줄에 id_gateway.pub 키를 추가해야 합니다. 그런 다음 .ssh/config
클라이언트에 다음과 같은 항목을 추가하십시오.
Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
이제 클라이언트에서 ssh private
직접 접속할 수 있어야 합니다. 이는 scp
및 에서도 작동합니다 sftp
.
추가 크레딧
여러 서버에 대해 이를 사용하고 싶지만 게이트웨이에서 하나의 공개 키만 관리하려는 경우 다음 트릭을 사용할 수 있습니다. sshd
기본적으로 특정 변수만 로컬 환경에서 수신되도록 허용합니다. 그 중 하나는 LC_PAPER
거의 사용되지 않는 것입니다. 따라서 이를 사용하여 다음과 같이 서버의 호스트 이름을 전달할 수 있습니다.
먼저 공개 키 항목을 다음으로 변경합니다.
command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...
그런 다음 클라이언트에서 .bashrc
파일(또는 사용하는 셸)에 다음과 같은 함수를 추가하세요.
ssh_proxy() {
LC_PAPER=$1 /usr/bin/ssh $*
}
그런 다음 원하는 경우 별칭을 만드십시오.
alias ssh=ssh_proxy
마지막으로 위에 표시된 것과 같은 Host
섹션을 추가합니다. .ssh/config
예를 들어:
Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
이제 게이트웨이에 있는 공개 키 하나만으로 ssh private
작업을 수행할 수 있습니다 .ssh private2