实现执行scp命令时不需要输入用户密码

本文介绍了如何在执行scp命令时避免输入用户密码。首先在本地生成公钥,并将其复制到远程机器的authorized_keys文件中。之后,可以使用scp命令在两台Linux主机之间无缝复制文件和目录,而无需每次都输入密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步,本地机器先产生 公钥

[root@
Client root]# ssh-keygen -b 1024 -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):                <-- 直接输入回车

Enter same passphrase again:                           <-- 直接输入回车

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

49:9c:8a:8f:bc:19:5e:8c:c0:10:d3:15:60:a3:32:1c root@Client

这样就会在 用户目录下的   .ssh 目录下产生两个文件  id_rsa 和 id_rsa.pub,然后 把 id_rsa.pub的内容复制到 远程机器的 用户目录下 .ssh 目录下的文件authorized_keys中即可。不需要覆盖它,只要粘贴在原有内容下边就行。

第二步,本地机器就可以通过 scp去获取文件了,不需要输入密码

scp xxx@10.6.6.54:(远程机器文件名)  /root(本地机器文件名)  把文件从远程主机copy到当前系统

两个参数反过来就是 当前一个文件copy到远程另外一台主机上

搞定,不需要输入密码了。

linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录; 

================== 
scp 命令 
================== 
scp 可以在 2个 linux 主机间复制文件; 

命令基本格式: 
       scp [可选参数] file_source file_target 

====== 
从 本地 复制到 远程 
====== 
* 复制文件: 
        * 命令格式: 
                scp local_file remote_username@remote_ip:remote_folder 
                或者 
                scp local_file remote_username@remote_ip:remote_file 
                或者 
                scp local_file remote_ip:remote_folder 
                或者 
                scp local_file remote_ip:remote_file 

                第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名; 
                第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名; 
        * 例子: 
                scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music 
                scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3 
                scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music 
                scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3 

* 复制目录: 
        * 命令格式: 
                scp -r local_folder remote_username@remote_ip:remote_folder 
                或者 
                scp -r local_folder remote_ip:remote_folder 

                第1个指定了用户名,命令执行后需要再输入密码; 
                第2个没有指定用户名,命令执行后需要输入用户名和密码; 
        * 例子: 
                scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/ 
                scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/ 

                上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录 


====== 
从 远程 复制到 本地 
====== 
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可; 

例如: 
        scp root@www.cumt.edu.cn:/home/root/others/music/1.mp3  /home/space/music/1.mp3 
        scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

最简单的应用如下 : 

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2 

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .


在Windows上使用`qprocess`库(这是Qt的一个模块,用于处理进程通信)来执行SCP命令并自动化输入密码,你需要遵循以下步骤: 1. 首先,确保已经安装了Qt环境,并且包含了`qprocess`的支持。 2. 创建一个QProcess对象并设置命令行选项,包括SCP的源、目标和需要密码的提示符(通常SSH会提示输入"Password:")。例如,如果你要从本地的`source.txt`复制到远程服务器的`destination.txt`,可以这样做: ```cpp QString source = "source.txt"; QString destination = "destination.txt"; QString passwordPrompt = "Password: "; QProcess scpProcess; scpProcess.start("scp", "-o PasswordAuthentication=yes -p user@remote_host:" + destination + " " + QDir::toNativeSeparators(source)); ``` 这里假设`user`是用户名,`remote_host`是远程主机地址。 3. 当`qprocess`启动,监听标准输入流(stdin)以捕获密码提示。当接收到`passwordPrompt`,你可以通过`scpProcess.waitForReadyRead()`检查是否准备好读取输入,然后输入密码: ```cpp while (!scpProcess.waitForFinished()) { QString input; if (scpProcess.canReadLine() && scpProcess.readLine() == passwordPrompt) { scpProcess.write(password + "\n"); // 将密码替换为实际的密码字符串 scpProcess.waitForBytesWritten(); } } ``` 4. 检查SCP过程的状态,如果成功则操作完成,如有错误则处理异常。 注意:这种方法并安全,因为它直接将密码发送到标准输入,最好是在更安全的环境中配置SSH密钥对来避免明文传输密码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值