다음 줄이 있는 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
어떤 이유로 이것이 옵션이 아닌 경우 대체 옵션을 사용하면 expect
SSH에 비밀번호를 보낼 수 있습니다.
답변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