scp命令

本贴最后更新于 1522 天前,其中的信息可能已经时移世异

我的需求是将 Linux 上的文件,scp 到 win 机器上。

我用的方法是 Java 调用 shell。将 Linux 的公钥放到 win 路径下。shell 中命令如下:

scp -o StrictHostKeyChecking=no /home/1.txt Administrator@172.1.1.1:/win/tmp/

如果公钥放好了,用户名@host 都正确,就属于免密码登陆了。这是正常情况下。

现在问题是,如果用户名@host(Administrator@172.1.1.1)这两个地方写错了一个。那在 Linux 下就会等待让输入密码。

我的程序是读取文件,文件很多的,不能让停在这里。也没有人能在这等着输入密码。

怎么解决这个问题呢???

我之前想了一个方法,可能不太靠谱。比如用个时间限制。但是用在哪里呢???

  • scp
    5 引用 • 14 回帖
  • 公钥
    3 引用 • 15 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    759 引用 • 874 回帖 • 538 关注
  • 求助
    49 引用 • 401 回帖 • 1 关注

赞助商 我要投放

14 回帖
请输入回帖内容 ...
  • 88250 1

    应该有个参数可以设置是否输入密码的话,我猜想。

  • 714593351 1

    没用过,帮顶饺子!!

  • yangyujiao

    @88250 命令可以这样写

    sshpass -p Aa123456 scp  1.txt Administrator@172.1.1.11:/home/Administrator/
    

    这个 Aa123456(密码)是 win 的登录密码。就是不想用这种密码的形式。因为 Administrator@172.1.1.11 这个位置是动态的参数。不想密码也动态传,才想到直接用免密码的方式。

    你说的不输入密码,是公钥也不用。Aa123456 也不用?

  • 88250

    @yangyujiao 我觉得可能有个参数可以让在口令不对的情况下直接退出命令,而不是等待 stdin 输入。

  • yangyujiao

    @88250 明白了,我查一下。

  • 88250

    @yangyujiao -o 参数后面加个 KbdInteractiveAuthentication=no 试试

  • An

    传文件请用 rsync

  • yangyujiao

    @88250 还是那样,,,呜呜呜。。。

  • yangyujiao

    @An cygwin 我们就用了这个。。。

    在 win 模拟出 SSH。然后用 scp 命令。

  • An

    @yangyujiao
    无论是在效率、多文件处理、可靠性、还是安全性上,rsync 都比 scp 好了不止一个数量级。
    另外,我记得 rsync 有 win 客户端

  • yangyujiao

    @An cygwin 这个就是 win 的客户端呀。。。但是不用 scp 命令。怎么自动传文件?

  • yangyujiao

    @An 刚查了 rsync 这个命令,也是需要用密码的,治标不治本。

  • An 1

    @yangyujiao --password-file=

  • yangyujiao

    找到的目前理想的解决方案,用如下命令:

    ####scp -o PasswordAuthentication=no -o ConnectTimeout=1 -o ConnectionAttempts=1 -o StrictHostKeyChecking=no 1.txt Administrator@172.1.1.1:/win/tmp

    PasswordAuthentication 是否需要密码验证

    ConnectTimeout 连接超过时间

    ConnectionAttempts 连接重试次数

请输入回帖内容 ...