无需密码通过scp命令+key的方式实现文件传输

本文介绍如何在Windows与Ubuntu之间设置SSH密钥对,实现文件传输时无需每次都输入密码的过程。通过生成SSH密钥对并配置Ubuntu服务器,可以简化跨平台文件传输的工作流程。

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

如果觉得scp每次都要输入密码很麻烦, 那么这是解决方案.
假设你平时在windows上开发,用户名是xiang, 你有一台Ubuntu服务器wdksw.com, 用户名是root.现在你准备上传一些文件到服务器上.
为方便叙述,w表示windows, u表示Ubuntu.w$表示在windows端输入的命令, u$表示在Ubuntu端输入的命令.

  • 首先在w端生成一对key

w$ssh-keygen -t rsa
如果一直按enter,则会在C:\Users\xiang\.ssh文件夹下生成id_rsa和id_rsa.pub两个文件.

  • 其次确保u端的ssh配置允许root用户登录

u$vim /etc/ssh/sshd_config
确保PermitRootLogin为yes.我的服务器默认就是yes.因此无需更改.

  • 将win端的id_rsa.pub上传到服务器的~/keys文件夹

u$mkdir ~/keys

上传文件:
w$scp ~/.ssh/id_rsa.pub root@wdksw.com:~/keys

  • 将上传的key添加到ssh的授权列表

如果.ssh文件夹不存在,创建之.
u$mkdir ~/.ssh
u$cat ~/keys/id_rsa.pub>>~/.ssh/authorized_keys

  • 搞定

win端再尝试使用scp命令, 你会发现无需输入密码.

  •  扩展

接下来,你可以在win端写个Python脚本, 实现一个简易的文件推送功能

比如你想实现一种同步盘的功能,自动同步发生变化的文件

 

转载于:https://www.cnblogs.com/xiangnan/p/5219552.html

### SCP命令自动化传输并直接指定密码的方法 SCP(Secure Copy Protocol)是一种基于SSH协议的安全文件复制工具,用于在网络中的两台主机之间安全地传输数据。然而,默认情况下,SCP并不支持直接在命令行中传递明文密码,因为这会带来严重的安全隐患。 为了实现自动化的SCP操作,通常有以下几种方法: #### 方法一:使用 SSH 密钥对进行无密码登录 一种推荐的方式是配置基于公私钥的身份验证来替代传统的密码输入[^2]。这种方式不仅提高了安全性,还简化了自动化流程的设计。具体步骤如下: 1. 在源服务器上生成一对SSH密钥(如果尚未存在),可以通过`ssh-keygen`完成。 ```bash ssh-keygen -t rsa ``` 2. 将生成的公钥拷贝至目标服务器上的授权密钥列表中,可利用 `ssh-copy-id` 工具完成此操作。 ```bash ssh-copy-id user@destination_host ``` 一旦设置成功,在执行SCP命令无需再手动输入密码即可完成文件传输。 #### 方法二:借助 expect 脚本处理交互式密码请求 当无法采用SSH密钥而必须依赖于密码的情况下,可以编写一个expect脚本来模拟人工输入密码的行为。Expect 是一种专门用来控制交互式应用的编程语言/工具,能够很好地解决这类问题。下面是一个简单的例子展示如何构建这样的脚本: ```tcl #!/usr/bin/expect set timeout 20 spawn scp /path/to/source/file username@remotehost:/path/to/dest/ expect "password:" send "your_password\r" interact ``` 注意替换上述代码中的路径、用户名以及实际使用的密码部分。运行该脚本前需赋予其执行权限并通过chmod命令调整相应属性: ```bash chmod +x your_script_name.exp ./your_script_name.exp ``` 这种方法虽然可行,但由于密码暴露在外存有一定风险,因此仅适用于临时场景或内部受控环境中[^1]。 #### 方法三:通过环境变量存储密码 (不建议) 理论上也可以尝试把密码保存在一个环境变量里供scp调用读取,不过大多数主流版本的OpenSSH客户端都不允许这样做以保护用户隐私和系统安全。所以除非特别定制编译过的openssh服务端才有可能实现这种功能,一般不应作为常规解决方案推广使用。 综上所述,最理想的做法还是应该优先选用SSH Key-based Authentication来进行身份确认从而达成完全无人值守式的自动化作业需求;而在某些特殊条件下,则可通过expect技术绕过传统限制达到目的但要充分评估潜在威胁后再决定是否采纳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值