1.命令简介

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

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

2.命令格式

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

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

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

转自:恋猫大鲤鱼

dablelv.blog.csdn.net/article/details/104616612

【每天一个 Linux 命令】ssh 命令相关推荐

  1. Linux下SSH命令使用方法详解

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

  2. 菜鸟学Linux命令:ssh命令 远程登录

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

  3. Linux常用命令——ssh命令

    在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) ssh openssh套件中的客户端连接工具 补充说明 ssh命令是openssh套件中的客户端连 ...

  4. linux git ssh_Git年满13岁,可以了解Linux和SSH命令,Python编程等等

    linux git ssh Git在4月7日满13岁,我们用13个Git技巧庆祝. 继续阅读以获取4月2日至8日读者喜爱的完整清单: John SJ Anderson 撰写的Git 13岁生日的13个 ...

  5. linux的ssh命令

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

  6. linux进阶-ssh命令的使用技巧全get

    掌握ssh命令的使用 文章目录 掌握ssh命令的使用 准备工作 1.ssh客户端连接服务器 2.ssh基于公私钥验证是否 是特定客户端 3.开启服务器node1, 将node3的sshd服务对应的公私 ...

  7. linux启用SSH命令

    启动SSH命令 service sshd start 查看SSH 状态命令 systemctl status sshd.service 允许外部以Root角色接入22端口 vim /etc/ssh/s ...

  8. linux之ssh命令

    一.简介: ssh相当于windows上的远程桌面连接,但没有桌面,只有文字终端.ssh是许多Linux使用者入门时必学的一个命令.借助ssh,开发人员可以很方便地连接远程或是局域网的其他电脑,直接在 ...

  9. linux安装ssh命令失败,Linux常见错误_SSH:Ubuntu16.4配置SSH常见问题及解决办法-Go语言中文社区...

    win10+ubuntu16.4 常见错误1:使用SSH连接Ubuntu出现"Algorithm negotiation failes" 解决办法如下: 1.在ubuntu命令行打 ...

  10. linux之ssh命令详解

    ssh是什么呢?

最新文章

  1. 盘点Java框架常用的3大底层技术!
  2. HP-UX B.11.31从安装到VG配置
  3. 【机器学习】ROC曲线和PR(Precision-Recall)曲线的联系
  4. php 中空数据 用大括号,php语法设计 数组为什么不采用普遍的{}大括号呢? 其它的 编程语言 在数组初始值 都是 用大括号{} 包含的。...
  5. HarmonyOS之AI能力·分词
  6. Entity Framework4.0 (一)概述(EF4 的Database First方法)
  7. 波拉契尔数列 C++
  8. Maven的pom.xml文件详解------Build Settings
  9. Linux 驱动编译报错:error: macro __DATE__ might prevent reproducible builds [-Werror=date-time]
  10. 如何让我们的VMware虚拟机上网——转载
  11. python flask webapi_在将Python Flask webapi部署到azurep时遇到依赖性问题
  12. C# .net防止一个程序(WinForm)重复运行的方法。
  13. ORM框架之Spring Data JPA(一)Hibernate实现JPA规范
  14. (4.10)mysql备份还原——利用binlog+全备恢复误删表【不推荐使用】
  15. 教你几招提高自媒体文章原创度
  16. sht21 c语言程序,SHT20,SHT21程序代码.pdf
  17. 【czy系列赛】czy的后宫6 bzoj1044 [HAOI2008]木棍分割
  18. TokenGazer《一问到底》| 第55期:研究员 VS Dimension
  19. html 播放360全景图,讯网360全景展示产品-html5全景图-flash全景展示-360度全景图制作...
  20. SNN 脉冲神经网络

热门文章

  1. win7桌面仿linux桌面,windows10开启 linux子系统桌面,巨详细,值得一藏-win7桌面主题...
  2. TFTPD32不能传输数据的解决与尝试
  3. 实验室虚拟仿真建设之技术选型剖析
  4. 计算机打印共享打印机,教您电脑打印机共享怎么设置
  5. java 信鸽推送demo_iOS中关于信鸽推送的使用demo详解
  6. Java虚拟机的类加载机制全面解析
  7. 超级计算机更深的蓝,国际象棋发生革命性变化 老棋手深感力不从心
  8. SecureCRT and SecureFX 8.3 中文版
  9. Sublime快捷键大全
  10. java毕业设计_基于java的毕业设计