当前位置: 技术问答>linux和unix
scp命令
来源: 互联网 发布时间:2016-05-03
本文导语: scp命令可以在2个能ping通的linux机器间进行拷贝 命令如下: scp /home/a.tar root@{ip}:/tmp 但输完这个命令后要输入{ip}的密码才行。 请问怎么样才能直接输入命令就能直接拷贝,而不需要再次输入密码才开始拷贝?(远程...
scp命令可以在2个能ping通的linux机器间进行拷贝
命令如下:
scp /home/a.tar root@{ip}:/tmp
但输完这个命令后要输入{ip}的密码才行。
请问怎么样才能直接输入命令就能直接拷贝,而不需要再次输入密码才开始拷贝?(远程机器肯定有密码的)
把密码添加到命令行中?好像没这个选项。
命令如下:
scp /home/a.tar root@{ip}:/tmp
但输完这个命令后要输入{ip}的密码才行。
请问怎么样才能直接输入命令就能直接拷贝,而不需要再次输入密码才开始拷贝?(远程机器肯定有密码的)
把密码添加到命令行中?好像没这个选项。
|
貌似 很难 你想要是你能写脚本,虽然便利,同时不也把你的password也暴露了嘛
我给你看一篇资料 或许对你有启示
http://blog.csdn.net/cdtdx/archive/2008/08/01/2752208.aspx
我给你看一篇资料 或许对你有启示
http://blog.csdn.net/cdtdx/archive/2008/08/01/2752208.aspx
|
如果非要输密码的话,可以用 expect
|
不难,凡是通过ssh协议的都可以通过ssh-keygen
另外,如当git通过ssh走(如git clone ssh:// ),也是一样用ssh-keygen产生
认证文件,避免每次输入密码。
先参考上面的链接里的内容试试,不行在这里再发贴。
另外,如当git通过ssh走(如git clone ssh:// ),也是一样用ssh-keygen产生
认证文件,避免每次输入密码。
先参考上面的链接里的内容试试,不行在这里再发贴。
|
用public key authentication:
1) 在本地机上给自己生成一对无密码密钥:
下面一个例子生成一对1024位的DSA密钥, 注意直接按回车键采用缺省值:
$ ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/XXXXX/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/XXXXX/.ssh/id_dsa.
Your public key has been saved in /home/XXXXX/.ssh/id_dsa.pub.
The key fingerprint is:
d1:07:26:fc:a9:71:e2:15:d8:e7:87:f2:1b:f0:e6:2e XXXXX@localhost.localdomain
$
这里 “XXXXX” 代表用户名。
2)拷贝公钥到远端机用户:
$ scp $HOME/.ssh/id_dsa.pub XXX@remotehost:~/.ssh/authorized_keys2
3) 以下命令应可直接使用了:
ssh XXX@remotehost uname -a
scp localfile XXX@remotehost:/tmp
1) 在本地机上给自己生成一对无密码密钥:
下面一个例子生成一对1024位的DSA密钥, 注意直接按回车键采用缺省值:
$ ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/XXXXX/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/XXXXX/.ssh/id_dsa.
Your public key has been saved in /home/XXXXX/.ssh/id_dsa.pub.
The key fingerprint is:
d1:07:26:fc:a9:71:e2:15:d8:e7:87:f2:1b:f0:e6:2e XXXXX@localhost.localdomain
$
这里 “XXXXX” 代表用户名。
2)拷贝公钥到远端机用户:
$ scp $HOME/.ssh/id_dsa.pub XXX@remotehost:~/.ssh/authorized_keys2
3) 以下命令应可直接使用了:
ssh XXX@remotehost uname -a
scp localfile XXX@remotehost:/tmp
|
想用expect的话,给你一段参考代码
sub scpToRemote {
my ($host,$user,$pass,$localfile,$remotefile) = @_;
my $expectfile = "/tmp/tmp-scp.$$";
my $tmp_scpopts="-o "StrictHostKeyChecking no"";
open(OFP,">$expectfile") || die "Cannot open $expectfile for writing!n";
# start writing the expect script:
# header:
print OFP "#!$expect_bin -fn";
print OFP "#n";
print OFP "# Temporary expect script, PID $$nn";
# spawn:
print OFP "set env(LD_LIBRARY_PATH) ""n";
print OFP "spawn $scp_bin $tmp_scpopts $localfile $user@$host:$remotefilen";
print OFP "set timeout 3600n";
# now the expect/send
print OFP "expect {n";
print OFP " "word: " {n";
print OFP " send -- "$pass\r"n";
print OFP " expect {n";
print OFP " "Permission denied" {n";
print OFP " exit 1n";
print OFP " }n";
print OFP " eof { }n";
print OFP " }n";
print OFP " }n";
print OFP " eof {n";
print OFP " }n";
print OFP "}n";
# close the file
close OFP;
# permissions:
system("chmod 700 $expectfile");
# run it:
my $expectRunCmd="TCL_LIBRARY=$tcl_path $expectfile";
if ($QUIET != 0) {
$expectRunCmd .= " >/dev/null 2>&1";
}
my $rc=system("$expectRunCmd");
# unlink the temp file:
unlink($expectfile);
# return the result from the system() call to the expect script.
return $rc;
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。