SSH 서버에 로그인하기 위한 쉘 스크립트

SSH 서버에 로그인하기 위한 쉘 스크립트

스크립트에 언급된 비밀번호를 사용하여 SSH 서버에 자동으로 로그인할 수 있는 쉘 스크립트를 작성하려고 합니다. 나는 다음 코드를 작성했습니다.

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

코드가 제대로 작동하지 않고 여전히 비밀번호를 묻습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

expect귀하의 경우처럼 SSH 서버에 로그인하기 위한 스크립트를 작성한 적이 있는데 , 제 스크립트는 다음과 같습니다:

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

내 생각에는 interact이것이 스크립트에서 누락되었을 수 있습니다.

답변2

당신이하고있는 일은 잘못되었습니다. 당신이 원하는 것은 비밀번호가 없는 SSH 키 쌍을 생성한 다음 (서버가 RSA 키 인증을 지원하는 한) 비밀번호를 입력하지 않고도 들어갈 수 있는 것입니다. 개인 키를 도난당할 수 있는 곳에 보관하면 보안 위험이 있습니다.

이 순서대로:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Return비밀번호를 묻는 메시지가 나타나면 누르세요.
  5. Return두 번째로 눌러 확인하세요.

이제 디렉터리에 두 개의 파일이 있으며 . ~/.ssh은 원격 서버에 안전하게 배치할 수 있는 공개 키입니다. 비밀번호가 없는 개인 키입니다.mysshkey.pubmysshkeymysshkey.pubmysshkey아니요원격 서버(또는 다른 사람이 복사본을 얻을 수 있는 위치)에 안전하게 배치할 수 있습니다.

SSH를 통해 액세스하려는 서버에서:

  1. 원격 서버에 로그인
  2. mkdir -p ~/.ssh
  3. 콘텐츠를 복사하여 붙여넣으세요 mysshkey.pub.~/.ssh/authorized_keys
  4. 이것이 무엇인지 ~/.ssh/authorized_keys확인 하십시오chmod600

이제 이를 로컬 머신에서 실행하려면 다음 명령을 실행하십시오.

ssh -i ~/.ssh/mysshkey <remote_server_ip>

비밀번호를 입력하지 않고 로그인됩니다.

이는 여러 위치에 비밀번호를 하드코딩하지 않고 비밀번호를 변경할 경우 업데이트할 필요가 없기 때문에 자동 로그인을 관리하는 데 더 선호되는 방법입니다.

답변3

Debian 기반 배포판에서 이 sshpass패키지는 원하는 것을 더 쉽게 달성할 수 있는 방법을 제공합니다. 이 패키지는 다른 많은 인기 배포판에서 사용할 수 있습니다. 먼저 설정해야 합니다.

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

그런 다음 다음과 같이 스크립트에서 SSH 명령을 호출합니다.

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

을 사용하고 expect.

답변4

먼저 sshPass를 설치하세요sudo apt-get install sshpass

그런 다음 .bashrc 파일에 별칭을 만듭니다.

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

이제 변경된 .bashrc 파일을 다시 로드하세요.source ~/.bashrc

이제 끝났습니다.

sshLogin이제 위에서 생성한 별칭을 사용하여 터미널에서 ssh를 실행할 수 있습니다.

관련 정보