ssh的基本介绍与应用

ssh是一种网络协议,用于计算机之间的加密登录,一个用户从本地电脑使用ssh协议登录另一台远程计算机,我们认为这种登录方式是安全的。即使被中途截获,密码也不会泄露。

ssh登录的流程

  • 远程主机收到用户的登录请求,把自己的公钥发给用户,
  • 用户使用这个公钥将用户的登录密码加密后发送回来,
  • 远程主机使用自己的私钥解密登录密码,如果密码正确就同意用户登录

ssh中间人攻击:

有人截获了登录请求,然后冒充远程主机,将伪造的公钥发送给用户,使用伪造的公钥获取用户的登录密码。这样ssh的安全机制就出现问题了
出现上面的原因是:ssh协议的公钥是没有证书中心公正(https有证书)的,都是自己签发的。

ssh基本用法

口令登录

  • 使用用户名登录:ssh [email protected],如果本地的用户名与远程的用户名相同,登录的时候可以使省略用户名。
  • ssh默认的端口是22,当你没有设置端口的时候,你的登录请求会被推送到远程主机的22端口,
  • 使用p参数可以修改端口号,ssh -p 32 [email protected]

公钥登录

公钥登录可以不用每次都必须输入密码,所谓的公钥登录,就是用户将自己的公钥存储在远程主机上,登录的时候远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后再发送回来,远程主机使用事先存储的公钥进行解密,如果成功直接允许登录shell。
这种方式要求用户必须提供自己的公钥,如果没有现成的可以使用ssh-keygen生成一个,建立本地git仓库就是这样的一个操作。

ssh数据传输

$ ssh user@host ‘mkdir -p .ssh && cat >> .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub
单引号中间的部分,表示在远程主机上执行的操作。后面的输入重定向,表示数据通过ssh传向远程主机。
ssh可以在用户和远程主机之间建立命令和数据的传输通道。所以很多事情都可以通过ssh来完成

  • 将本地的文件复制到远程主机
    • $ cd && tar czv src | ssh user@host ‘tar’ xzv
  • 将远程主机的文件复制到本地
    • $ ssh user@host ‘tar cz src’ | tar xzv
  • 查看主机是否运行某个进程
    • $ ssh user@host ‘ps ax |grep xxx’

scp(secure copy)跨机远程拷贝

用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只能在本机,不能跨服务器,而且scp的传输是加密的。可能会稍微影响速度,并且两台主机之间的操作相互有操作权限。

绑定本地端口

利用ssh传送数据的特点,我们可以让不加密的网络连接全部走ssh,从而提高数据传输的安全性

    // 让8080端口的数据,都通过ssh传向远程主机
    $ ssh -D 8080 user@host

ssh会建立一个socket,去监听本地的8080端口,一旦有数据传向那个端口。就自动把它移到SSH链接上发往远程主机。将不加密的8080端口现在全部改成加密的端口。

本地端口转发

某些应用场景中绑定本地端口还不行,还需要指定数据的传送主机,形成点对点的"端口转发"。

// host1(本地主机),host2(远程主机) host3()
// host1无法连接到host2,但是host3可以连接host1,和host2,所以我们通过host3将host1和host2连接起来。
// host1:
$ ssh -L 8080:host2:21 host3 // L参数接受三个值:本地端口:目标主机:目标主机端口,
// 上面命令的意思是:指定ssh绑定本地端口8080,然后指定host3将所有的数据转发到目标主机host2的21端口(假设host2运行FTP,默认端口是21),这样一来我们只要连接上host1的8080端口就相当于连上了host2的21端口。

$ ftp localhost:8080 

// 本地转发使得host1和host3之间仿佛形成了一个数据传输的秘密隧道,因此又被称为"SSH隧道"

远程端口转发

绑定远程端口转发
借助上面的案例,同样是host1和host2无法连接

// host1(外网机器) host2() host3(内网机器)
host3是内网机器,可以使用host3连接host1,但是使用host1不能连接host3,本地转发就不行了,
解决办法:host3上建立与host1的连接,然后在host1上使用这个连接。
// 在host3中执行这个 
$ ssh -R 8080:host2:21 host1  // R接受三个值:远程主机端口:目标主机:目标主机端口

上面命令的意思是:让host1监听自己的8080端口,然后将所有的数据经过host3,转发到host2:21端口,对于host3来说host1就是远程主机端口。

然后我们就可以在host1连接host2
$ ftp localhost:2121
注意:远程端口转发的前提条件是:host1和host3两台主机都有sshd和ssh客户端

引用:
https://www.cnblogs.com/wukaikk/p/7791561.html
https://www.cnblogs.com/ftl1012/p/ssh.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章