文章目录

  • 1.命令简介
  • 2.命令格式
  • 3.选项说明
  • 4.常用示例
  • 参考文献

1.命令简介

ssh(Secure SHell)命令是 OpenSSH 套件的组成部分,是远程登录服务 SSH 的客户端程序,用于登录远程主机。

ssh 是一个用于登录到远程机器并在远程机器上执行命令的程序。它的目的是取代 rlogin 和 rsh,并在一个不安全的网络上提供两个不受信任的主机之间的安全加密通信。X11 连接和任意 TCP 端口也可以通过安全通道进行转发。

2.命令格式

ssh [OPTIONS] [-p PORT] [USER@]HOSTNAME [COMMAND]

ssh 最常用的功能是登录远程主机,选择以什么用户连接哪台机器,然后输入密码即可。

如果不想通过选项 -p 指定 PORT,可使用 URI 格式 ssh://[USER@]HOSTNAME[:PORT] 来指定目标主机。

3.选项说明

-1强制只使用协议第一版
-2强制只使用协议第二版
-4强制只使用 IPv4 地址.
-6强制只使用 IPv6 地址
-A允许转发认证代理的连接。可以在配置文件中对每个主机单独设定这个参数
-a禁止转发认证代理的连接
-b BIND_ADDRESS在拥有多个地址的本地机器上,指定连接的源地址
-C压缩所有数据。压缩算法与 gzip(1) 使用的相同
-c {blowfish | 3des | des}选择会话的密码算法。3des 是默认算法
-c CIPHER_SPEC另外, 对于协议第二版,这里可以指定一组用逗号隔开、按优先顺序排列的加密算法
-D [BIND_ADDRESS:]PORT指定一个本地主机动态的应用程序级的转发端口。工作原理是这样的,本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接。目前支持 SOCKS4 和 SOCKS5 协议,而 ssh 将充当 SOCKS 服务器. 只有 root 才能转发特权端口。可以在配置文件中指定动态端口的转发
-e ESCAPE_CHAR设置 pty 会话的转义字符,默认为字符 ~。转义字符只在行首有效,转义字符后面跟一个点表示结束连接,后跟一个 control-Z 表示挂起连接,跟转义字符自己表示输出转义字符自身。把转义字符设为 none 则禁止 转义功能,使会话完全透明
-F CONFIGFILE指定 ssh 指令的配置文件,将忽略系统级配置文件 /etc/ssh/ssh_config 和用户级配置文件 ~/.ssh/config
-f ssh 在执行命令前退至后台
-g允许远端主机连接本地的转发端口
-I SMARTCARD_DEVICE指定智能卡设备。智能卡里面存储了用户的 RSA 私钥
-i IDENTITY_FILE指定一个 RSA 或 DSA 认证所需的身份(私钥)文件。协议第一版的默认文件是 ~/.ssh/identity 以及协议第二版的 ~/.ssh/id_rsa 和 ~/.ssh/id_dsa 文件。可以同时使用多个 -i 选项,也可以在配置文件中指定多个身份文件
-K启用基于 GSSAPI 的身份验证和向服务器转发 GSSAPI 凭据
-k禁用向服务器转发 GSSAPI 凭据
-L [BIND_ADDRESS:]PORT:HOST:HOSTPORT将本地主机的地址和端口接收到的数据通过安全通道转发给远程主机的地址和端口
-l LOGIN_NAME指定登录远程主机的用户。可以在配置文件中对每个主机单独设定这个参数
-M将 ssh 客户端置于主模式进行连接共享。多个 -M 选项将 ssh 置于主模式,并在接受从连接之前进行确认
-m MAC_SPEC对于协议第二版,可以指定一组用逗号隔开,按优先顺序排列的 MAC (message authentication code) 算法
-N不执行远程命令,用于转发端口。仅限协议第二版
-n把 stdin 重定向到 /dev/null,防止从 stdin 读取数据。在后台运行时一定会用到这个选项
-O CTL_CMD控制主动连接多路复用主进程。参数 CTL_CMD 将被传递给主进程。CTL_CMD 可取值 check(检查主进程是否正在运行)和 exit(让主进程退出)
-o OPTION可以在这里给出某些选项,格式和配置文件中的格式一样。它用来设置那些没有单独的命令行标志的选项
-p PORT指定远程主机的端口。可以在配置文件中对每个主机单独设定这个参数
-q安静模式。消除大多数的警告和诊断信息
-R [BIND_ADDRESS:]PORT:HOST:HOSTPORT将远程主机上的地址和端口接收的数据通过安全通道转发给本地主机的地址和端口
-S CTL_PATH指定用于连接共享的控制套接字的位置
-s用于请求远程系统上的子系统调用。子系统是 SSH2 协议的一个特性,它有助于将 SSH 用作其他应用程序(如 sftp(1))的安全传输。子系统通过远程命令指定
-T禁止分配伪终端
-t强制分配伪终端。这可用于在远程计算机上执行基于屏幕的任意程序,例如菜单服务。多个 -t  选项强制分配终端, 即使没有本地终端
-V显示版本信息并退出
-v冗详模式。打印关于运行情况的调试信息。在调试连接、认证和配置问题时非常有用。多个 -v 选项能够增加冗详程度,最多三个
-W HOST:PORT将客户端上的标准输入和输出通过安全通道转发给指定主机的端口
-w LOCAL_TUN[:REMOTE_TUN]指定客户端和服务端之间转发的隧道设备
-X允许 X11 转发,可以在配置文件中对每个主机单独设定这个参数
-x禁止 X11 转发
-Y启用受信任的 X11 转发。受信任的 X11 转发不受 X11 安全扩展控制的约束
-y使用 syslog(3) 系统模块发送日志信息。默认情况下,此信息被发送到 stderr

4.常用示例

(1)使用指定用户名和端口登录远程主机。

ssh -p3600 root@9.134.114.170

输入用户登录密码后完成登录。未指明端口和用户名,则分别由配置文件 ~/.ssh/ssh_config 和 /etc/ssh/ssh_config 中的 Port 和 User 选项决定。如果配置文件未指定,则端口默认为 22 ,用户名默认为当前用户。

注意:ssh 获取相关参数的顺序如下:

1.command-line options
2.user's configuration file (~/.ssh/config)
3.system-wide configuration file (/etc/ssh/ssh_config)

ssh 利用非对称加密实现安全的登录,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。非对称加密的登录流程如下:

整个登录过程如下:

1.topgun 终端要登录 Server 服务器,发起登录请求 `ssh work@server.com`。
2.服务端运行有 sshd 服务,并监听指定的端口,默认为 22 号端口。服务端会生成一对公钥和私钥;此时将公钥返回给客户端;
3.客户端使用公钥,对登录密码进行加密(如服务器work用户密码为xxx),生成公钥加密字符串;
4.客户端将公钥加密字符串发送给服务端;
5.服务端使用私钥,解密公钥加密字符串,得到原始密码;
6.校验密码是否合法(此为本机 work 密码);
7.返回登录结果给客户端:成功登录或密码错。

在非对称加密中,由于只有公钥会被传输,而私钥是服务端本地保存,因此即便公钥被监听,也无法拿到原始密码,从而安全地登录服务器。

(2)在远程主机上执行指定命令,如查看远程主机指定设备的分区情况。

ssh -p3600 root@9.134.114.170 fdisk -l /dev/vda
root's password:
Authentication successful.Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf6abafecDevice Boot      Start         End      Blocks   Id  System
/dev/vda1              63   209712509   104856223+  83  Linux

(3)通过 ssh 实现免密登录。免密登录的实现过程如下:

1.在客户端使用 ssh-keygen 生成一对密钥:公钥+私钥;
2.将客户端公钥追加到服务端的 authorized_key 文件中,完成公钥认证操作;
3.认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端;
4.服务端检索 authorized_key 文件,确认该公钥是否存在。如果存在该公钥,则生成随机数 R,并用公钥进行加密,生成公钥加密字符串 pubKey(R);
5.将公钥加密字符串传递给客户端;
6客户端使用私钥解密公钥加密字符串,得到 R;
7.服务端和客户端通信时会产生一个会话 ID(sessionKey),用 MD5 对 R 和 SessionKey 进行加密,生成摘要;
8.客户端将生成的 MD5 加密字符串传给服务端;
9.服务端同样生成 MD5(R,SessionKey) 加密字符串;
10.如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功。此时不用输入密码,即完成建连,可以开始远程执行 Shell 命令了。

第一步使用 ssh-keygen 命令在客户端生成 RSA 公钥和私钥,一直回车确认。公钥和私钥默认名称为 id_rsa.pub(公钥)和私钥(id_rsa),默认保存在 ~/.ssh 目录下。

ssh-keygen -t rsa

第二步将客户端公钥追加至服务端 ~/.ssh/authorized_keys 文件中,authorized_keys 是用来存放客户端公钥的文件。有三种方法,一是通过 ssh-copy-id 命令,二是通过 scp 命令,三是手动复制。例如使用 ssh-copy-id 命令实现如下:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 3600 root@9.134.114.170

第三步使用 ssh 进行免密登录。

ssh -p3600 root@9.134.114.170

参考文献

[1] ssh(1) manual
[2] ssh_config(5) manual
[3] OpenSSH 官网
[4] 博客园.linux上ssh免密登录原理及实现

Linux 命令(126)—— ssh 命令相关推荐

  1. linux系统中ssh命令,Linux系统中SSH 命令的用法有哪些?

    今天小编要跟大家分享的文章是关于Linux系统中SSH命令的用法有哪些?一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方.要亲自一台一台的去访问来管理它们显然不是最好的方法,通 ...

  2. 学习Linux命令:关于ssh命令

    1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...

  3. linux从本地上传文件命令,Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件...

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...

  4. 【Linux】一步一步学Linux——ssh命令(176)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 ssh命令是openssh套件中的客户端连接工具,可以给予 ...

  5. linux远程连接telnet命令,Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令...

    本节,我们将介绍一些和Linux系统远程登录及通信相关的命令. SSH命令 SSH(Secure Shell即安全的Shell)可以登录和操作远程操作系统,它会建立一个安全的连接,将通信数据进行加密, ...

  6. linux的ssh命令

    转自:http://man.linuxde.net/ssh ssh命令 网络安全 ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器. 语法 ssh(选项 ...

  7. linux怎么进入字符命令界面,如何进入CentOS字符界面及窗口模式

    在CentOS界面切换问题中,也许很多人习惯进入字符工作方式来进行操作.那么如何切换到字符工作方式呢?下面我们就来介绍3种方法来进入字符工作方式: 在图形环境下开启终端窗口进入字符工作方式.在系统启动 ...

  8. linux执行多个命令_您必须知道的前50多个Linux命令

    linux执行多个命令 Using Linux command on a regular basis? Today we'll look at 50+ Linux commands you must ...

  9. Linux远程管理常用命令(超全超详细)【持续更新】

    目录 1. shutdown命令 2.ifconfig命令 3.uname命令 4.uptime命令 5.free命令 6.who命令 7.last命令 8.history命令 9.ping命令 10 ...

  10. linux 的ss命令,Linux中的ss命令的详细解释

    linxu下的ss其实Socket Statistics的缩写.下面由学习啦小编为大家整理了linux的ss命令的详细解释的相关知识,希望对大家有帮助! 一.Linux中的ssh命令的详细解释 1.命 ...

最新文章

  1. Exchange 2003允许部分用户发送邮件到部分外网服务器
  2. Vagrant: hostmanager 主机名管理插件
  3. 释疑の资源短缺DATASET_CANT_CLOSE
  4. stlink 升级固件以后失败_STM32固件升级的一点经验
  5. pc,移动端局域网文件共享
  6. iOS开发--AVFoundation自定义相机
  7. Leetcod每日一题:151.reverse-words-in-a-string(翻转字符串里的单词)
  8. 用SDWebImage加载FLAnimatedImage
  9. 316 Remove Duplicate Letters 去除重复字母
  10. vcenter 进入 Linux 操作模式
  11. android web service视频教程,需要一个简单的android / webservice工作教程?
  12. Windows 7 镜像下载汇总
  13. Power Builder软件的下载安装
  14. 关系模式无损分解的测试方法
  15. 【法律】如何保障未来夫妻合法权益:婚前房屋财产约定协议书
  16. 计算机显卡更新,电脑显卡升级,教您显卡怎么升级
  17. Python3 插入排序
  18. 小企业怎样选择服务器和操作系统
  19. vue.js中created方法作用
  20. win10以太网未识别的网络解决方法

热门文章

  1. 说实话,我主要是冲着奖金来的
  2. PHP 绕过禁用函数漏洞的原理与利用分析
  3. 蚂蚁金服开源服务注册中心 SOFARegistry
  4. 要把人工智能提速50倍的ARM,却依然坚持做“通用的计算架构”
  5. javaWeb项目中web.xml的xsd( XML Schemas Definition)文件
  6. gcc 编译多个源文件-转
  7. Python判断文件和文件夹是否存在的方法
  8. zabbix3.0 监控mysql服务器性能实现过程
  9. JAVA内存释放机制
  10. boost::shared_ptr文档翻译