SSH远程登录和端口转发详解
 
介绍
SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境。
SSH 只是协议,有多种实现方式,本文基于其开源实现 OpenSSH
远程登录
SSH主要用于远程登录:
$ ssh user@host
当本地用户名和远程用户名一致时,可省略用户名:
$ ssh host
SSH 协议默认端口是22,指定端口可使用 -p 参数
$ ssh -p 2222 user@host
MITM
SSH 采用公钥加密的方式来保证传输安全。过程如下:
  1. 客户端发起登录请求,远程主机将自己的公钥发个用户;
  2. 客户端使用该公钥将登录密码加密后发送给远程主机;
  3. 远程主机使用私钥解密登录密码,如密码正确则允许客户端登录。
However!
  1. 由于 SSH 协议的公钥是自己签发的,并不像HTTPS 的SSL证书是有CA机构颁发的。如果有人插在用户与远程主机之间,截获登录请求,然后冒充远程主机,将伪造的公钥发给客户端,那么用户则很难辨别真伪。
  2. 这样就可以获取用户登录密码,用来登录远程主机。这就是MITM,(Man-in-the-middle attack,中间人攻击)
密码登录
第一次登录远程主机,会有如下提示:
 
  1. $ssh10.0.0.12
  2. Theauthenticityofhost'10.0.0.12(10.0.0.12)'can'tbeestablished.
  3. RSAkeyfingerprintis3a:45:30:52:b5:ea:2a:55:e7:23:41:ef:16:76:0b:8d.
  4. Areyousureyouwanttocontinueconnecting(yes/no)?
意思是:无法确认远程主机真实性,指知道它的公钥指纹,是否继续连接?
公钥指纹(fingerprint):公钥采用RSA算法,长度较长难以比对,所以对其进行MD5计算,得到128位的指纹,即上例中的3a:45:30:52:b5:ea:2a:55:e7:23:41:ef:16:76:0b:8d
其实并没有什么有效便捷的方式确认公钥指纹的真实性,确认接受远程主机公钥:
Are you sure you want to continue connecting (yes/no)? yes
系统提示远程主机已加入到受信主机列表:
Warning: Permanently added '10.0.0.12' (RSA) to the list of known hosts.
然后提示输入密码:
root@10.0.0.11's password:
输入密码正确,就可以正常登陆了。
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统会发现它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
公钥登陆
除了密码登录,SSH 还支持公钥登录。
“公钥登录”原理是:用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求输入密码。
公钥登录需要用户提供自己的公钥,一般保存在 $HOME/.ssh/ 目录下,id_rsa是私钥,id_rsa.pub是公钥。如果没有可以通过ssh-keygen生成。
 
  1. $ls-1~/.ssh
  2. id_rsa
  3. id_rsa.pub
  4. known_hosts
需要把公钥发送到远程主机:
 
  1. #ssh-copy-id[-i[identity_file]][user@]machine
  2. $ssh-copy-idroot@10.0.0.12
此后再登录就不需要输入密码了。
如果还是无法使用公钥登录,可以检查一下远程主机SSH配置/etc/ssh/sshd_config,打开如下注释并重启SSH服务[我发现CentOS release 6.8 (Final)默认SSH配置中注释掉以下内容也是可以使用公钥登录的]:
 
  1. >#RSAAuthenticationyes
  2. >#PubkeyAuthenticationyes
  3. >#AuthorizedKeysFile.ssh/authorized_keys
  4. >
authorized_keys文件
远程主机将用户的公钥,保存在 $HOME/.ssh/authorized_keys 中。公钥是一段字符串,也可以手动追加到远程主机authorized_keys文件中,每行一个。
也可以通过如下命令代替ssh-copy-id,解释公钥的保存过程:
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
远程操作
SSH可以用于直接在远程主机上操作
 
  1. #查看远程主机Nginx进程
  2. ssh10.0.0.12 'ps-ef|grepnginx'
端口转发
本地转发
本地转发是指:把本地主机端口通过待登录主机端口转发到远程主机端口上去。
本地转发通过参数 -L 指定,格式: -L [本地主机:]本地主机端口:远程主机:远程主机端口
ssh -L 5000:www.google.com:80 user@host
通过上面的命令,访问本地5000端口,相当于访问远程主机www.google.com的80端口,并且这是通过通过登录主机来安全地转发数据的。当不能直接访问远程主机某端口,而登录主机可以访问时,可以使用这种方式将远程主机端口绑定到本地。
远程转发
远程转发是指:把登录主机端口通过本地主机端口转发到远程主机.
远程转发通过参数 -R 指定,格式: -R 登录主机端口:远程主机:远程主机端口。
ssh -R 8080:localhost:80 user@host
通过上面的命令,访问登录主机的 8080 端口就相当于访问 localhost:80!
例如下面这种场景:我在本机起了一个web服务,希望别人从外网访问或测试,但是外网是不能直接访问我的内网机器。所以我可以在本机上执行上面的命令,这样就就可以通过访问登录主机的80端口,来访问本机的80端口了,从而实现外网访问内网的应用了。简直太方便~
动态转发
动态转发不需要指定特定的目标主机和端口号,可以实现不加密的网络连接,全部走SSH连接,从而提高安全性。
例如把本地5000端口的数据,都通过SSH传向登录主机:
ssh -D 5000 user@host
例如可以用于***的场景,在浏览器中设置代理类型为 SOCKS(5),主机及端口为127.0.0.1:5000 就可以通过登录主机***了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
 
参考文章:
 

SSH远程登录和端口转发详解的更多相关文章

  1. SSH端口转发详解及实例

    一.SSH端口转发简介 SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据.但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫 ...

  2. SSH端口转发详解及实例-转载

    作者:珂儿吖 出处:http://www.cnblogs.com/keerya/ 目录 1.1 SSH端口转发的两大功能 实验一:实现SSH端口转发——本地转发 实验二.实现SSH端口转发——远程转发 ...

  3. SSH端口转发详解

    正文 一.SSH端口转发简介 SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据.但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务.这一过程 ...

  4. Linux:ssh端口转发详解

    ssh是个多用途的工具,不仅可以远程登录,还可以搭建socks代理.进行内网穿透,这是利用它的端口转发功能来实现的. 所谓ssh端口转发,就是在ssh连接的基础上,指定 ssh client 或 ss ...

  5. ssh远程连接的故障排查详解

    排查故障: 1.两个机器之间是否通畅,看物理网络(网线网卡,IP是不是正确) ping ip -t 来检测物理网络是否通畅 通 不通 不通: 1.客户端到服务器端物理链路有问题 网卡 ,IP ,  网 ...

  6. [转帖]SSH远程登录配置文件sshd_config详解

    SSH远程登录配置文件sshd_config详解 2016年06月02日 17:42:25 Field_Yang 阅读数 61386   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  7. Linux实现利用SSH远程登录服务器详解

    Linux实现利用SSH远程登录服务器详解 http://www.111cn.net/sys/linux/55152.htm

  8. Linux ssh登录和软件安装详解

    阿哲Style   Linux第一天 ssh登录和软件安装详解 Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器 ...

  9. SSH原理与运用(二):远程操作与端口转发

    SSH原理与运用(二):远程操作与端口转发 作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一 ...

随机推荐

  1. Mantis中的状态

    在 Mantis中的 问题状态一共有以下几种 10:new,20:feedback,30:acknowledged,40:confirmed,50:assigned,80:resolved,90:cl ...

  2. 排查在 Azure 中创建新 Linux 虚拟机时遇到的 Resource Manager 部署问题

    本文内容 常见问题 收集活动日志 问题:自定义映像:预配错误 问题:自定义/库/应用商店映像:分配失败 后续步骤 尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. ...

  3. 再学UML-Bug管理系统UML2.0建模实例(四)

    3.3 顺序图(实现模型) 在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息.在BMS系统中,对每 ...

  4. CentOS7 查询已安装的包方便整理 /卸载

    以PHP为例.首先查看已安装的PHP rpm -qa |grep php 输出结果: php-cli--.el7.x86_64 php-common--.el7.x86_64 查询rpm包的安装时间和 ...

  5. SQL server 2008 安装报错 reporting services catalog database file existence

    SQL server 2008 安装时报错 提示 reporting services catalog database file existence 查了一下,是因为原来装过Sql server 2 ...

  6. IOS UIImagePickerController(拍照或者读取相册)

      UIImagePickerController ● 使用UIImagePickerController就可以进行拍照或者读取相册 ● 通过sourceType属性来决定拍照还是读取相册 ➢ UII ...

  7. Python 用多线程上传和下载文件

    # -*- coding: utf-8 -*- __author__ = 'louis' from ftplib import FTP import multiprocessing import ti ...

  8. FastJSON、Gson、Jackson(简单了解使用)

    下载地址(maven) Jackson:http://mvnrepository.com/search?q=jackson FastJson:http://mvnrepository.com/sear ...

  9. Alert Log删除

    标题:Renaming or Deleting the Alert Log While an Oracle Instance is Up & Running (文档 ID 74966.1) Q ...

  10. [Oracle]分区索引

    上一节学习了分区表,接着学习分区索引. (一)什么时候对索引进行分区 · 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引: · 在对分区表进行维护时,为了避免 ...