SSH-远程连接&文件传输

SSH

常用远程连接软件

  • Putty:PuTTY为一开放源代码软件,只有500多k,小巧轻便,但功能单一

  • SecureCRT:SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。缺点是颜色方案不符合大众习惯

  • XShell:Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。缺点:收费

  • MobaXterm:功能强大且免费

SSH

概述

  • SSH是一种网络协议,用于计算机之间的加密登录。用户可以从本地计算机,使用SSH协议远程登录另一台计算机。

  • sshd服务该服务基于SSH协议,用于远程连接,服务随系统自动安装

  • sshd服务

    • 22端口
    • TCP协议
  • 基于C/S架构,客户端ssh,服务端openssh

加密算法

对称加密算法(DES)
  • 发送方使用密钥明文数据加密成密文,发送出去

  • 接收方收到密文后,使用同一个密钥将密文解密成明文

非对称加密算法(RSA)
  • 公钥跟私钥一一对应,公钥可公开,私钥自己私有
  • 接收方将公钥发给发送方
  • 发送方使用接收方发送过来的公钥明文数据加密成密文,发送出去
  • 接收方收到密文后,使用自己本地留存的私钥将密文解密成明文
DES&RSA比较
比较项 对称加密 非对称加密
密钥 相同 不同,但有对应关系
加密速度 较快 较慢
数据传输速度 较快 较慢
安全性 较低 较高

SSH认证

基于用户名密码认证
原理
  • 客户端向服务端发起一个登录请求

  • 服务端将自己的公钥发送给客户端

  • 客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端

  • 服务端收到客户端发过来的加密密码后使用本地留存的私钥进行解密

  • 服务端将解密出来的密码和/etc/shadow文件里的用户密码对比认证

  • 服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令

在这里插入图片描述

远程连接
获取服务端的ip
[root@server ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:f9:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.226.10/24 brd 192.168.226.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::1b78:bfb3:4567:b45c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
ip地址为192.168.226.10

输入设置的密码即可登录
[root@client ~]# ssh root@192.168.226.10
root@192.168.226.20's password: 
Last failed login: Sat Aug 21 15:46:55 CST 2021 from node1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Aug 21 15:35:38 2021 from 192.168.226.1

基于密钥对认证
原理
  • 在客户端生成一个密钥对(公钥和私钥)
  • 客户端将公钥发给服务端,服务端将其保存在~/.ssh/authorized_keys
  • 客户端发起向服务端发起一个登录请求,服务端比对公钥(再次发来的公钥与保存在~/.ssh/authorized_keys中的公钥是否一致)
  • 比对一致后,服务端会生成随机字符串,再通过客户端发来的公钥加密
  • 服务端将加密后的字符串发送给客户端
  • 客户端收到后,通过本地私钥解密,然后将解密后的字符串发回非服务端
  • 服务端比对字符串,验证与生成的字符串是否一致
  • 一致,即可登录成功能
    在这里插入图片描述
免密登录
客户端主机中生成“密钥对” 
[root@client ~]# ssh-keygen  #一直回车即可
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
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
&lt;think&gt;嗯,用户让我解释这个命令的功能,首先我需要分解每个部分的作用。这个命令看起来是在用tar和ssh进行文件传输,对吧?让我仔细看看。 首先,用户执行的是cd /root/autodl-tmp/,这是切换目录到/root/autodl-tmp/下。然后通过&amp;&amp;连接下一个命令,也就是tar cf - *。tar的c表示创建归档文件,f后面指定文件名,这里用的是-,表示输出到标准输出。所以tar cf - *的意思是将当前目录下的所有文件打包成一个tar归档,但是不保存成文件,而是直接输出到标准输出流。 接下来是管道符|,把前面的输出作为后面的输入。后面是ssh -p 66666 root@region-3.autodl.com,这里指定了端口66666,连接到的远程主机是region-3.autodl.com,用户是root。ssh后面的命令部分是&quot;cd /root/autodl-tmp &amp;&amp; tar xf -&quot;,也就是在远程主机上先切换到相同的目录,然后执行tar xf -,这里的xf表示解压,而-表示从标准输入读取数据。所以整个流程就是把本地的tar包通过管道传给远程的tar解压。 那这个命令的整体作用应该是在本地打包目录下的所有文件,然后通过ssh传输到远程服务器的相同目录下解压,实现文件的同步或者迁移。不需要生成中间文件,直接通过管道传输,节省了磁盘空间,尤其是在处理大文件的时候比较有效率。 不过要注意的是,执行这个命令需要确保本地有权限访问/root/autodl-tmp目录,并且远程服务器的ssh端口是66666,而且用户有权限登录到root账户。另外,两边的目录结构需要存在,否则可能会出错。比如,如果远程的/root/autodl-tmp目录不存在,cd就会失败,导致解压失败。所以可能需要先创建目录,或者确保目录存在。 另外,tar命令的参数是否正确?比如,tar cf - * 这里的*会不会漏掉隐藏文件?因为*在shell中默认不匹配以点开头的文件,如果需要包含隐藏文件,可能需要使用.来代替*,或者在shopt中调整配置。不过这可能取决于具体的需求和环境设置。 还有,使用root用户通过ssh登录可能存在安全风险,特别是在开放网络环境下,使用非默认端口虽然能减少一些自动化攻击,但关键还是需要强密码或者密钥认证来保证安全。 总结一下,这个命令的作用就是通过ssh通道,将本地某个目录下的文件同步到远程服务器的对应目录,利用tar和管道实现高效的无中间文件传输。用户可能需要了解这些细节,以及潜在的前提条件和安全考虑。&lt;/think&gt;这个命令组合实现了**通过SSH隧道进行目录实时压缩传输**的功能,主要利用`tar`和`ssh`的管道特性完成跨服务器文件同步。以下是分步解析: --- ### 一、命令结构解析 ```bash cd /root/autodl-tmp/ &amp;&amp; tar cf - * | ssh -p 66666 root@region-3.autodl.com &quot;cd /root/autodl-tmp &amp;&amp; tar xf -&quot; ``` --- ### 二、本地操作部分 (`&amp;&amp;`左侧) 1. **`cd /root/autodl-tmp/`** 切换至本地服务器的 `/root/autodl-tmp` 目录 2. **`tar cf - *`** - `c`: 创建新归档文件 - `f -`: 将归档内容输出到**标准输出(stdout)**而非实体文件 - `*`: 打包当前目录下所有可见文件(不含隐藏文件- 效果:将目录内容打包成一个数据流 --- ### 三、远程操作部分 (`|`右侧) 1. **`ssh -p 66666 root@region-3.autodl.com`** 通过SSH连接远程服务器的66666端口,使用`root`账号登录到`region-3.autodl.com` 2. **远程执行的命令 `&quot;cd /root/autodl-tmp &amp;&amp; tar xf -&quot;`** - `cd /root/autodl-tmp`: 切换至远程服务器的相同目录 - `tar xf -`: 从**标准输入(stdin)**读取数据流并解压 - 效果:将接收到的数据流实时解压到目标目录 --- ### 四、整体流程 1. 本地打包 &rarr; 管道传输 &rarr; 远程解压 2. **无中间文件生成**:数据全程通过管道流动,节省磁盘空间 3. **目录结构保持同步**:要求本地和远程的`/root/autodl-tmp`目录必须存在 --- ### 五、典型应用场景 - 跨服务器快速迁移大量文件 - 实时同步目录内容(需结合其他工具监控文件变动) - 绕过磁盘IO瓶颈(适合传输后立即删除源文件的场景) --- ### 六、注意事项 1. **权限问题**:需确保对本地和远程目录有读写权限 2. **隐藏文件**:`*`不会包含以`.`开头的隐藏文件,如需传输需改为`.* *` 3. **网络稳定性**:传输中断会导致解压失败 4. **安全建议**:建议使用SSH密钥认证而非密码登录 --- ### 七、扩展改进 ```bash # 包含隐藏文件的改进版 cd /root/autodl-tmp/ &amp;&amp; tar cf - . | ssh -p 66666 root@region-3.autodl.com &quot;cd /root/autodl-tmp &amp;&amp; tar xf -&quot; # 添加压缩的优化版(需双方支持gzip) cd /root/autodl-tmp/ &amp;&amp; tar czf - * | ssh -p 66666 root@region-3.autodl.com &quot;cd /root/autodl-tmp &amp;&amp; tar xzf -&quot; ``` (其中`z`参数启用gzip压缩,适合带宽有限场景)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值