답변:
sshpass를 사용하십시오 .
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
암호가 bash 기록에 표시되지 않습니다.
sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path
위의 내용은 원격 호스트에서 로컬로의 경로 내용을 복사합니다.
설치 :
apt install sshpass
yum install sshpass
port install sshpass
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
apt-get install sshpass
yum -y install sshpass
sshpass -f
passwdfile` scp [...] . This way, the password won't show up in
ps` 목록 등 파일 비밀번호를 사용하여 비밀번호를 보호 할 수 있습니다.
다음과 같이 ssh 키를 생성하십시오.
ssh-keygen -t rsa -C "your_email@youremail.com"
내용을 복사하여 ~/.ssh/id_rsa.pub
마지막으로 원격 시스템에 추가~/.ssh/authorized_keys
원격 시스템에 권한이 있는지 확인 0700 for ~./ssh folder
하고0600 for ~/.ssh/authorized_keys
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote_server>
원격 서버에서 키를 복사하는 데 사용해야 합니다
Windows에서 서버에 연결하는 경우 Putty 버전의 scp ( "pscp")를 사용하면 -pw
매개 변수 와 함께 비밀번호를 전달할 수 있습니다 .
pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest
(나는이 같은 퍼티를 사용하여 싫어,하지만 작동)
curl은 파일을 복사하기 위해 scp 대신 사용할 수 있으며 명령 행에서 비밀번호를 지원합니다.
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
scp
암호를 입력하려면 30 초 이상 기다려야하지만 curl
즉시 작동했습니다.
유닉스 / 터미널에서 'expect'스크립트를 사용할 수 있습니다
예를 들어 'test.exp'를 작성하십시오.
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass\r"; exp_continue}
}
스크립트를 실행
expect test.exp
도움이 되길 바랍니다.
다음은 expect
도구 를 사용 하여 수행하는 방법의 예입니다 .
sub copyover {
$scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
$scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
print $scp 'password' . "\n";
$scp->expect(30,"-re",'$\s') || die "Never got prompt from parent
+system:$!\n";
$scp->soft_close();
return;
}
아무도 언급하지 않았지만 Putty scp (pscp)에는 암호에 대한 -pw 옵션이 있습니다.
https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp 에서 설명서를 찾을 수 있습니다.
ssh-keygen
위에서 설명한대로 설정 하면 할 수 있습니다
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
매번 입력을 줄이려면 .bash_profile
파일을 수정 하고
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
그런 다음 터미널에서 source ~/.bash_profile
. 나중에 remote_scp
터미널에 입력하면 scp
암호없이 명령을 실행해야 합니다.
그렇지 않은 경우 수행하기 전에 "예상"도구가 있는지 확인하십시오.
# apt-get install expect
다음 내용으로 스크립트 파일을 작성하십시오. (# vi / root / scriptfile)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
"expect"도구로 스크립트 파일을 실행하십시오
# expect /root/scriptfile
이 블로그 게시물을 기반으로 한 가난한 사람의 Linux / Python / Expect와 유사한 예는 다음과 같습니다. 간단한 쉘을 완전한 대화식 TTY로 업그레이드 . Expect를 설치하거나 모듈을 Python에 추가 할 수없는 오래된 컴퓨터에이 기능이 필요했습니다.
암호:
(
echo 'scp jmudd@mysite.com:./install.sh .'
sleep 5
echo 'scp-passwd'
sleep 5
echo 'exit'
) |
python -c 'import pty; pty.spawn("/usr/bin/bash")'
산출:
scp jmudd@mysite.com:install.sh .
bash-4.2$ scp jmudd@mysite.com:install.sh .
Password:
install.sh 100% 15KB 236.2KB/s 00:00
bash-4.2$ exit
exit
대안은 사용자 키의 공개 절반을 대상 시스템의 인증 된 키 파일에 추가하는 것입니다. 전송을 시작한 시스템에서 ssh-agent 데몬을 실행하고 키의 개인 절반을 에이전트에 추가 할 수 있습니다. 그런 다음 키 비밀번호를 묻지 않고 에이전트를 사용하여 개인 키를 가져 오도록 배치 작업을 구성 할 수 있습니다.
이것은 pageant 및 pscp를 사용하는 UNIX / Linux 시스템 또는 Windows 플랫폼에서 가능해야합니다.
위에서 언급 한 모든 솔루션은 앱을 설치했거나 sshpass를 제외하고 설치할 관리자 권한이 있어야 작동합니다.
백그라운드에서 scp를 시작하는 데 매우 유용한 링크를 찾았습니다.
$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1
https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/
rhel / centos 6 sshpass를 얻는 단계 :
# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass
이 답변이 정말 도움이 되었습니다 .
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
비밀번호를 전달할 수있을뿐만 아니라 복사 할 때 진행률 표시 줄이 표시됩니다. 정말 대단합니다.