
첫 번째 ssh 명령은 내 컴퓨터에서 수행되고 키 비밀번호를 입력한 다음 서버에 로그인하면 두 번째 ssh 명령이 입력됩니다.
ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000
#i get prompted for a password to use the key
ssh -D 6001 -p 6666 localhost -l dancloud
#i get prompted for a password associated with user dancloud
- 이러한 명령을 하나의 명령으로 결합하여 동일한 결과를 얻으려면 어떻게 해야 합니까? 나는 netcat과 ProxyCommand가 여기서 유용할 수 있다는 것을 알았지만 아직 알아내지 못했습니다.
- 이 두 비밀번호를 하드코딩하여 bash 스크립트에 넣으려면 어떻게 해야 합니까?
./login.sh
스크립트에 하드코딩된 비밀번호를 사용하여 이 코드를 모두 실행하고 동일한 최종 결과를 얻을 수 있기를 바랍니다 .
답변1
첫 번째 가능성은 분명합니다( -t
스위치 참고).
ssh -t -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 \
"ssh -D 6001 -p 6666 localhost -l dancloud"
언뜻 보기에는 복잡해 보이지만 ProxyCommand
개념적으로는 하나만 전달하면 됩니다( netcat
더 이상 권장되지 않는 버전이며 -W
스위치를 사용하는 것이 더 우아합니다).
Host proxy
Hostname 54.152.188.55
User admin
IdentityFile cloudkey
Host target
Hostname localhost
Port 6666
User dancloud
DynamicForward 6000
ProxyCommand ssh -W %h:%p proxy
그런 다음 연결하는 데 사용하세요 ssh target
(참조...이제 bash 스크립트도 필요하지 않습니다 :)).
설명하다:두 번째 소켓 ssh
도 컴퓨터에서 실행되므로 동적 전달 소켓(SOCKS 프록시)이 컴퓨터에 직접 생성됩니다.
비밀번호와 관련하여 이는 권장되지 않습니다(비밀번호는 다음과 같아야 합니다).비밀) 그러나 그것은가능한업무용으로 sshpass
앞쪽에 사용하는 것이 더 적합합니다 ssh
.
매뉴얼 페이지에서는 스위치에 대해 다음과 같이 ssh
설명합니다 -W
.
-W
host
:port
요청은 클라이언트의 표준 입력 및 출력에 대한 보안 채널을 통해 포트의 호스트로 전달됩니다.
-N
,-T
,ExitOnForwardFailure
및 을 의미합니다ClearAllForwardings
. 프로토콜 버전 2에만 적용됩니다.
와 함께 사용하면 ProxyCommand
요청한 항목에 연결한 hostname
다음 netcat
(표준 IO를 연결하여 host
:) port
(매개변수)의 기본 내장 버전을 제공합니다.
답변2
다음과 같이 원하는 것을 달성할 수 있어야 합니다.
ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 -t "ssh -D 6001 -p 6666 localhost -l dancloud"
이 -t
플래그는 첫 번째 시스템에서 pseudo-tty를 강제로 사용하고 첫 번째 시스템(이 경우 ssh에서 dancloud 터널로)에서 나머지 코드를 실행합니다. 다음 명령의 경우 큰따옴표는 선택 사항일 수 있습니다.
ssh 10.0.0.0 -t ssh 192.168.0.0
따옴표가 필요하지 않습니다. 저는 이 명령을 매일 사용합니다(물론 올바른 IP를 사용하여). 그러나 따옴표 없이 실패하면 마일리지가 달라질 수 있습니다. 그냥 추가하세요 ;-)
스크립트에 하드코딩된 비밀번호의 경우 이를 달성하기 위해 제가 생각할 수 있는 유일한 방법은 다음을 사용하는 것입니다.예상되는스크립트이지만 이를 위해서는 TCL 코드에 대한 지식이 필요합니다. 적용 가능한 모든 시스템에서 SSH 전달 및 키 기반 인증을 사용하는 것이 가장 좋습니다. 라는 간단한 프로그램을 확인할 수 있습니다.열쇠고리$HOME/.bashrc
파일에 다음을 추가하기 만 하면 됩니다 . keychain --agents ssh
키체인은 SSH 키를 찾고 필요한 경우 SSH 에이전트를 생성하거나 기존 에이전트를 사용합니다. ssh
이는 여러 터미널에서 사용하는 경우 유용합니다.
-A
키 기반 인증을 사용하려면 SSH 매개변수에 다음을 추가하면 됩니다 .
ssh -A -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 -t "ssh -D 6001 -p 6666 localhost -l dancloud"