SSH를 통해 집에서 대학 서버에 원격으로 연결한 다음 서버 터미널에서 가상 머신으로 SSH를 통해 일부 데이터를 처리하는 스크립트를 작성해야 합니다. 가능합니까?
지금까지 시도한 내용은 다음과 같습니다.
#!/usr/bin/expect
set login "myuser"
set addr "test.ac.uk"
set addr2 "t002"
set pw "mypassword"
spawn ssh -o StrictHostKeyChecking=no $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
expect "$login@$addr2\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact
실수: ssh: 호스트 t002 포트 22에 연결 중: 연결이 거부되었습니다.
현재 집에서 수동으로 로그인하는 방법은 다음과 같습니다.
~/Desktop # ssh host
비밀번호를 묻는 메시지를 표시합니다.
일단 성공적으로 로그인되었습니다.
-bash-4.2$ ssh user@t002
비밀번호를 다시 입력하라는 메시지가 표시됩니다.
편집하다:Mike가 제안한 대로 두 번째 SSH 라인을 업데이트했습니다.
에서:
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
도착하다:
send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"
이제 스크립트는 액세스 거부를 반환하지만 동시에 VM 대신 서버에 로그인합니다.
답변1
이는 일반적인 문제입니다. 외부 인터넷에서 직접 액세스할 수 없는 서버에 액세스하려고 하지만예공개 중간 호스트에서 액세스 가능합니다. (중간 호스트는상자 말.)
이 문제는 매우 흔하기 때문에 OpenSSH는 자연스럽게 Jumpbox(또는 Jumpboxen?) 사용을 단순화하는 편리한 방법을 제공합니다. 두 가지 방법이 있는데, 하나는 기존 방법이고 다른 하나는 새로운 방법입니다. 이전 방법은 여전히 작동하지만 새 방법은 더 직관적이며 점프 상자에서 사용할 수 있는 응용 프로그램에 대해 더 적은 가정을 합니다.
질문에 언급된 예제 머신을 사용하면 다음과 같이 수행할 수 있습니다.
ssh -o StrictHostKeyChecking=no -o [email protected] myuser@t002
아니면 동등하지 않다고 생각합니다.-o [email protected]
-W [email protected]
어느 쪽이든 이 방법을 사용하려면 최신 OpenSSH 버전이 필요합니다. 이전 버전에 문제가 있는 경우 다음을 수행해야 합니다.
ssh -o StrictHostKeyChecking=no -o ProxyCommand='ssh [email protected] "nc %h %p"' myuser@t002
이전 방법에서는 Jumpbox에 netcat이 설치되어 있다고 가정합니다.
새로운 접근 방식의 또 다른 이점은 Jumpbox에 개인 키를 보관할 필요가 없다는 것입니다. ProxyJump는 로컬 소유의 개인 키를 사용하려고 시도할 만큼 똑똑합니다. 따라서 점프 박스가 손상된 경우 점프 박스 뒤의 어떤 것도 손상시킬 필요가 없습니다.
이제 매번 그렇게 긴 명령을 작성하는 데 지쳤을 수도 있습니다. SSH를 더 많이 사용할수록 설정하려는 동기가 더 커집니다 $HOME/.ssh/config
. 이 파일에서 원격 호스트에 대한 별칭을 제공하고 특정 구성을 해당 호스트와 연결할 수 있습니다.
예를 들어 ssh_config는 다음과 같이 설정됩니다.
Host jumpbox
User myuser
Hostname test.ac.uk
StrictHostKeyChecking=no
Host t002
User myuser
StrictHostKeyChecking=no
ProxyJump jumpbox
이 구성을 완료한 후에는 이제 더 간단한 명령을 사용하여 t002에 로그인할 수 있습니다.
ssh t002
ssh_config를 사용하여 할 수 있는 다른 멋진 작업이 많이 있습니다. man ssh_config
SSH에 대해 자세히 알아보면서 수시로 확인하고 다시 방문하세요. 계속해서 더 멋진 일을 발견하게 될 거예요 :)
SSH 구성 설정에 대한 소개 연습 예는 다음과 같습니다.https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/
답변2
새로운 SSH를 생성합니다. 노력하다:
send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"
답변3
그냥 스크립트에 있는 명령어를 사용해서 입력을 줄이고 사용자 크레딧을 입력했어요!
#!/bin/bash
ssh -o StrictHostKeyChecking=no [email protected] 'ssh -o StrictHostKeyChecking=no myuser@t002'
귀하의 요구에 맞게..
ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no myuser@t002'
첫 번째 서버의 키를 컴퓨터에 복사하고 다음과 같이 참조하세요.
ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no -i /ssh/1stserverkey myuser@t002'