当前位置:  技术问答>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}的密码才行。

请问怎么样才能直接输入命令就能直接拷贝,而不需要再次输入密码才开始拷贝?(远程机器肯定有密码的)
把密码添加到命令行中?好像没这个选项。

|
貌似 很难  你想要是你能写脚本,虽然便利,同时不也把你的password也暴露了嘛
我给你看一篇资料 或许对你有启示
http://blog.csdn.net/cdtdx/archive/2008/08/01/2752208.aspx

|
如果非要输密码的话,可以用 expect





|
不难,凡是通过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

|
想用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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3