ฉันรู้ว่าไม่แนะนำ แต่เป็นไปได้หรือไม่ที่จะส่งรหัสผ่านของผู้ใช้ไปยัง scp?
ฉันต้องการคัดลอกไฟล์ผ่าน scp ซึ่งเป็นส่วนหนึ่งของงานแบ็ตช์และแน่นอนเซิร์ฟเวอร์ที่รับต้องใช้รหัสผ่านและไม่ฉันไม่สามารถเปลี่ยนการรับรองความถูกต้องด้วยคีย์ได้อย่างง่ายดาย
ฉันรู้ว่าไม่แนะนำ แต่เป็นไปได้หรือไม่ที่จะส่งรหัสผ่านของผู้ใช้ไปยัง scp?
ฉันต้องการคัดลอกไฟล์ผ่าน scp ซึ่งเป็นส่วนหนึ่งของงานแบ็ตช์และแน่นอนเซิร์ฟเวอร์ที่รับต้องใช้รหัสผ่านและไม่ฉันไม่สามารถเปลี่ยนการรับรองความถูกต้องด้วยคีย์ได้อย่างง่ายดาย
คำตอบ:
ใช้sshpass :
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
รหัสผ่านจะไม่แสดงในประวัติทุบตี
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 scp รุ่น ("pscp") รุ่น Putty ให้คุณส่งรหัสผ่านด้วย-pw
พารามิเตอร์
pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest
(ฉันเกลียดการใช้ผงสำหรับอุดรูแบบนี้ แต่ใช้งานได้)
curl สามารถใช้เป็นทางเลือกแทน scp เพื่อคัดลอกไฟล์และสนับสนุนรหัสผ่านใน commandline
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
scp
ต้องรอ 30+ วินาทีเพื่อให้ฉันใส่รหัสผ่าน แต่ใช้curl
งานได้ทันที
คุณสามารถใช้สคริปต์ 'คาดหวัง' บนยูนิกซ์ / เทอร์มินัล
ตัวอย่างเช่นสร้าง '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-copy-id
เพื่อเพิ่มคีย์ ssh:
$which ssh-copy-id #check whether it exists
หากมีอยู่:
ssh-copy-id "user@remote-system"
เมื่อคุณตั้งค่า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
จากนั้นก็ทำ terminal ของคุณ หลังจากนั้นหากคุณพิมพ์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 /root/scriptfile
ต่อไปนี้เป็นตัวอย่างของ Linux / Python / คาดหวังของคนจนโดยอ้างอิงจากบล็อกโพสต์นี้: การอัพเกรดเชลล์อย่างง่ายเป็น TTY แบบโต้ตอบทั้งหมดหอยอัพเกรดที่ง่ายต่อการทาง 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 daemon และเพิ่มไพรเวตครึ่งหนึ่งของคีย์ให้กับเอเจนต์ จากนั้นงานแบ็ตช์สามารถกำหนดค่าให้ใช้ตัวแทนเพื่อรับไพรเวตคีย์แทนการขอรหัสผ่านของคีย์
สิ่งนี้ควรทำในระบบ UNIX / Linux หรือบนแพลตฟอร์ม Windows โดยใช้ pageant และ pscp
โซลูชั่นทั้งหมดที่กล่าวมาข้างต้นสามารถทำงานได้เฉพาะเมื่อคุณติดตั้งแอพหรือคุณควรมีสิทธิ์ของผู้ดูแลระบบในการติดตั้งยกเว้นหรือ 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/
ขั้นตอนในการรับ sshpass สำหรับ rhel / centos 6:
# 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
แหล่งที่มา: https://community.mapr.com/thread/9040
ฉันพบคำตอบที่เป็นประโยชน์จริงๆที่นี่
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
ไม่เพียง แต่คุณสามารถส่งรหัสผ่านไปยังที่นั่น แต่ยังจะแสดงแถบความคืบหน้าเมื่อทำการคัดลอก ยอดเยี่ยมจริงๆ