스크립트가 자동으로 비밀번호를 가져오도록 하려면 어떻게 해야 합니까?

스크립트가 자동으로 비밀번호를 가져오도록 하려면 어떻게 해야 합니까?

다음 줄이 있는 sftp스크립트와 같이 한 서버에서 다른 서버로 일부 파일을 실행하는 스크립트가 있습니다 .script.ksh

sftp user@ip_address << EOF
cd path
put file1
bye
EOF

스크립트를 실행할 때;

./script.ksh

아래와 같이 비밀번호를 묻습니다.

Password:

비밀번호 없는 연결이 아니기 때문에 여기서는 비밀번호를 수동으로 전달해야 합니다.

이 스크립트를 자동화하고 싶은데 Password메시지가 표시되면 자동으로 비밀번호를 받아야 합니다. 누구든지 어떤 제안이 있습니까?

답변1

이 시도:

#!/usr/bin/expect

spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"

또는 전체 스크립트를 예상대로 사용하고 싶지 않은 경우:

#!/bin/sh

expect << 'EOS'
spawn sftp USERNAME@ip_address:/path/to/folder
expect "Password:"
send "PASSWORD\n"
expect "sftp>"
send "put file1\n"
expect "sftp>"
send "bye\n"
EOS

답변2

설계상 ssh는 비밀번호 "포함"을 허용하지 않습니다. 이는 공개-개인 키 쌍을 사용하는 비대화형 인증 메커니즘이 있기 때문입니다.

그러므로 나는 이것을 첫 번째 기항지로 고려하는 것이 좋습니다. 일반적으로 간단합니다.

  • 클라이언트에서 실행하십시오 ssh-keygen.
  • 서버에 추가하세요 id_rsa.pub.~/.ssh/authorized_keys

어떤 이유로 이것이 옵션이 아닌 경우 대체 옵션을 사용하면 expectSSH에 비밀번호를 보낼 수 있습니다.

답변3

정말 쉽습니다. 특히 /etc/hosts 파일에 다른 서버의 IP와 이름이 포함되어 있는 경우에는 더욱 그렇습니다.

먼저, 다른 컴퓨터와 공유할 수 있는 공개 키를 생성합니다.

ssh-keygen

이 세 가지 질문에 답하려면 Enter 키를 누르세요.

그런 다음 다음과 같이 공개 키를 다른 서버에 연결합니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

원격 호스트는 /etc/hosts 파일의 이름 또는 IP 주소일 수 있습니다.

다른 호스트의 키를 수락하라는 메시지가 표시됩니다. "예"(단지 y가 아님)라고 대답하면 다른 서버의 비밀번호를 묻는 메시지가 표시됩니다.

그게 다야. 이제 키가 원격 호스트의 .ssh/authorized_key 파일에 연결되었습니다.

이를 사용하려면 scp 또는 ssh를 정상적으로 실행하면 더 이상 원격 호스트의 비밀번호를 묻는 메시지가 표시되지 않는 것을 볼 수 있습니다.

답변4

echo "ftping files to destination"
USER='(username)'
PASSWD='(********)'
sftp user@ip_address << EOF
quote USER $USER
quote PASS $PASSWD
cd path
put file1
bye
EOF

관련 정보