SSH 相关命令详解

  • ssh
  • ssh-keygen
  • ssh-copy-id
  • ssh-agent 和 ssh-add
  • ssh-keyscan
  • sshd

ssh

ssh – OpenSSH 远端登陆客户端,默认22端口

描述:

ssh (ssh client)是一个用于登录到远程计算机并在远程计算机上执行命令的程序。它旨在通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。X11连接、任意TCP端口和unix域套接字也可以通过安全通道转发。ssh连接并登录到指定的目的地,该目的地可以指定为[user@]主机名,也可以指定为ssh://[user@]hostname[:port]形式的URI。用户必须使用以下几种方法之一向远程机器证明他/她的身份(见下文)。如果指定了一个命令,它将在远程主机上执行,而不是登录shell。

基本使用:

# ssh [user]@[ip_or_name][:port],若不指定user默认使用本机当前用户名;若不指定端口默认使用22
ssh root@121.199.172.217

每次远程连接ssh都需要指定user和ip是一件非常繁琐的事情,可以是通过配置的形式使用默认值:

# =============== 设置ip别名 =================
# 配置ip别名
vim /etc/hosts# 末尾添加'IP alias name'
121.199.172.217 aliyun# 此时,ssh root@121.199.172.217等价于
ssh root@aliyun# =============== 设置默认user =================
# 进入~/.ssh/目录下
cd ~/.ssh/# 在当前目录下config文件中添加内容,若文件不存在则创建(这里我默认登陆zsl用户)
touch configvim config
Host aliyunUser zsl

此时想要通过ssh连接远程121.199.172.217时,只需要执行:

ssh aliyun

是不是非常方便呢(注意使用ssh需要安装OpenSSH)

ssh-keygen

每次使用ssh远程访问都需要输入密码一定觉得十分麻烦,此时就可以使用 ‘‘ssh-keygen’’ 用于生成公私钥文件,将公钥发送到远端服务器,就可以免密登陆远端服务器。

# 指定文件名aliyun生成 私钥aliyun、公钥aliyun.pub
ssh-keygen -f aliyun

生成之后还需要将aliyun.pub传输到远端服务器上,将aliyun.pub内容追加到~/ssh/authorized_keys文件内容;

注意:~/ssh/authorized_keys文件权限普通用户需要设置为chmod 600,root用户chmod 644。

由于这里使用指定文件名,需要在配置文件中增加aliyun指定文件。

zsl0@zsl0deMacBook-Pro .ssh % cat config
# ============= 阿里云服务器 =============
Host aliyunUser zslPreferredAuthentications publickeyIdentityFile ~/.ssh/aliyun# ========================================

如果生成公钥并且发送到远端还是需要输入密码,排查步骤:

第一步:ssh -vvv aliyun 查看详细步骤是否使用生成公钥;

第二步:查看远端~/.ssh/authorized_key是否存在aliyun.pub内容

其他可选option:

  • -t 加/解密算法
  • -b 秘钥长度,rsa默认秘钥长度的为 2048
  • -C 注释,一般是填写用户名
  • -f 指定生成的秘钥文件名,如果不提供此参数则使用默认文件名,如rsa私钥默认文件名 ~/.ssh/id_rsa ,公钥默认文件名 ~/.ssh/id_rsa.pub

ssh-copy-id

把本地的ssh公钥文件安装到远程主机对应的账户下,ssh-copy-id命令 可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限远程主机。

# ssh-copy-id -i [file_name] [user]@[ip_or_name]
ssh-copy-id -i aliyun.pub zsl@aliyun

注意:本地 ~/.ssh/id_rsa 的权限,chmod 400 ~/.ssh/id_rsa ,该文件包含用于授权的私钥,如果该文件可以被其他用户访问,ssh 会忽略该私钥。

# 注意
# .ssh 一定要 是chmod 700 .ssh
# .ssh/id_rsa 一定要是 chmod 400 .ssh/id_rsa

可选项:

  • -i 指定文件名,如果不传入 -i 参数,ssh-copy-id 使用默认 ~/.ssh/identity.pub 作为默认公钥。如果多次运行 ssh-copy-id ,该命令不会检查重复,会在远程主机中多次写入 authorized_keys 。

ssh-agent 和 ssh-add

ssh-agent 用来代理ssh密钥,如果没有通过配置的方式,指定对应服务器公钥路径,则每次都需要使用 ssh -i 来指定公钥地址,十分麻烦;这里就可以使用ssh-agent结合ssh-add命令来管理密钥。

# 可以先查看当前ssh-agent状态
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent501  2412     1   0 11:27上午 ??         0:00.03 /usr/bin/ssh-agent -l501  4597  4577   0 10:41下午 ttys000    0:00.00 grep ssh-agent# 启动ssh-agent
ssh-agent $SHEEL# 此时再查看进程
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent501  2412     1   0 11:27上午 ??         0:00.03 /usr/bin/ssh-agent -l501  4611  4610   0 10:43下午 ??         0:00.00 ssh-agent /bin/zsh501  4614  4610   0 10:43下午 ttys000    0:00.00 grep ssh-agent# 停止ssh-agent命令(注意当窗口关闭时,进程也会停止)
ssh-agent -k

在测试ssh-agent之前,需要将先前config文件配置的指定公钥地址注释掉:

zsl0@zsl0deMacBook-Pro .ssh % cat config
# ============= 阿里云服务器 =============
Host aliyunUser zsl
#   PreferredAuthentications publickey
#   IdentityFile ~/.ssh/aliyun# ========================================

此时再使用 ssh aliyun,访问就需要输入密码了;

那么开始尝试ssh-agent代理吧!

# 首先启动ssh-agent(注意如果刚刚没有停止ssh-agent则不需要启动)
ssh-agent $SHELL# 查看进程是否启动成功
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent501  2412     1   0 11:27上午 ??         0:00.03 /usr/bin/ssh-agent -l501  4611  4610   0 10:43下午 ??         0:00.00 ssh-agent /bin/zsh501  4614  4610   0 10:43下午 ttys000    0:00.00 grep ssh-agent
# 添加密钥
ssh-add ~/.ssh/aliyun# 访问aliyun
ssh aliyun

ssh-add其他参数:

# -l查询所有密钥
zsl0@zsl0deMacBook-Pro .ssh % ssh-add -l
3072 SHA256:YUyjunktfEdZ45Esh+fG07rlEV0OqKHWWrhOOY1GQw0 zsl0@zsl0deMacBook-Pro.local (RSA)# -d 删除密钥
zsl0@zsl0deMacBook-Pro .ssh % ssh-add -d ~/.ssh/aliyun
Identity removed: /Users/zsl0/.ssh/aliyun RSA (zsl0@zsl0deMacBook-Pro.local)zsl0@zsl0deMacBook-Pro .ssh % ssh-add -l
The agent has no identities.

是不是非常方便,当有多个密钥时,对应不同远端地址,可以使用config配置文件的方式指定文件或者使用ssh-agent来代理管理多个密钥,不需要再操心哪个密钥对应哪个远端服务器。

ssh-keyscan

ssh-keyscan 用来收集公钥的主机地址

zsl0@zsl0deMacBook-Pro .ssh % ssh-keyscan aliyun
# aliyun:22 SSH-2.0-OpenSSH_7.4
aliyun ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB6pxxxxxxxxxxxxxx7GPZfK5U31/Im7bAYnxYtqndXSE9Tw8X73RJtc/u8cQhWKjuszPNMDTZS1kinKhbJDbWnLMXzd+rBfp++gZHXbfhIseVYmIpjiwmw0NmCZtARhVcPu1vPoSkxVPjXA0FPnGCQmwdpxcdo8R6j/oYE7yRWEXA3vbd2fxxxxxxxxxxxx33yBU27Eeev+u68zq6MEqvjQfGvxiRE8D7fAfIlw9ugmHCyebOjZbIW9mHwbti6UjVt/W/PdFiC7fDDKyJvgkDOTokA4RqdPRnqlX/phltA2dr2Vbxxxxxxxxxx
# aliyun:22 SSH-2.0-OpenSSH_7.4
aliyun ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIxxxxxxxxxBIpksTXSC3PDMccEmRjRZjhq72g0WwigP4IX+b430EeCxxxxxxxxx6JtEl/HE17rb8afZd4QHt0nppKoas=
# aliyun:22 SSH-2.0-OpenSSH_7.4
aliyun ssh-ed25519 AAAAC3NzaxxxxxxxE5AAAAIIlxxxxxxxxxxJrMUEs+e9r3pQJ4571uHmVRFAko1
# aliyun:22 SSH-2.0-OpenSSH_7.4
# aliyun:22 SSH-2.0-OpenSSH_7.4

其他可选项:

  • -4:强制使用IPv4地址;
  • -6:强制使用IPv6地址;
  • -f:从指定文件中读取“地址列表/名字列表”;
  • -p:指定连接远程主机的端口;
  • -T:指定连接尝试的超时时间;
  • -t:指定要创建的密钥类型;
  • -v:信息模式,打印调试信息。

sshd

sshd是 OpenSSH守护进程

openssh套件在不安全的网络中为两台为信任的主机之间建立加密的数据通信,是rlogin、rsh等明文传输数据的通信工具的替代品。sshd指令是openssh套件中的核心程序,其他的指令(如,sftp-server、slogin、scp)等都是基于sshd命令的。

# 查看aliyun(CentOS7系统) sshd服务
[zsl@iZbp10sz66ubwocy0uxhauZ ~]$ systemctl status sshd
● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since 五 2021-11-05 19:04:37 CST; 9 months 8 days agoDocs: man:sshd(8)man:sshd_config(5)Main PID: 1126 (sshd)CGroup: /system.slice/sshd.service└─1126 /usr/sbin/sshd -DWarning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

常用参数:

-4 强制使用IPv4地址
-6 强制使用IPv6地址
-D 以非后台守护进程的方式运行服务器
-d 调试模式
-e 将错误发送到标准错误设备,而不是将其发送到系统日志
-f<配置文件> 指定服务器的配置文件
-g<登录过期时间> 指定客户端登录的过期时间(默认时间为120秒),如果在此期限内,用户没有正确认证,则服务器断开此客户端的连接
-h<主机key文件> 指定读取主机key文件
-i sshd以inetd方式运行
-o<选项> 指定sshd的配置选项
-p<端口> 指定使用的端口号
-q 静默模式,没有任何信息写入系统日志
-t 测试模式

2022-08-14 SSH 相关命令详解相关推荐

  1. 20-Linux系统进程与计划任务相关命令详解整合

    系统进程与计划任务相关命令详解整合 at at命令用于在指定时间执行命令.它能够接受在当天的hh:mm(小时:分钟)式的时间指定.假如该时间已过去,那么就放在第二天执行. 也能够使用midnight( ...

  2. Linux 中 3 个文件打包上传和下载相关命令详解

    tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...

  3. uboot启动内核的相关命令详解——boot、bootm

    1.boot和bootm命令的联系 当我们进入uboot的命令终端后,可以利用boot和bootm来启动内核,但是命令的使用方式有区别: 直接输入boot命令就可以启动内核,如果使用bootm命令,后 ...

  4. php redis命令大全,redis中key相关命令详解

    一.概述: 本文将主要讲述与Key相关的Redis命令.学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器.(推荐:redis视频教程) 二.相关命令列表: 命令原型 ...

  5. linux 硬盘、RAID相关命令详解

    本文主要介绍linux下查看各种硬盘信息的命令如何使用,如何快速的查到自己想要的硬盘相关信息,各种命令做一个汇总. Nvme-cli Q1:如何查看nvme写缓存打开否: [root@node83 p ...

  6. 08.env和set命令详解

    目录 1.环境变量 2.env命令查找环境变量 3.set命令查找环境变量 1.环境变量 先自定义变量,然后export声明变量,则环境变量设置成功 1)环境变量设置与删除: 首先声明了变量age=多 ...

  7. RPM 包相关命令详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_33656602/article/ ...

  8. 云原生之kubectl命令详解(二)及pod的相关操作

    目录 一.kubectl命令详解 1.查看某个资源的详细信息:kubectl describe pod pod_name -n nameapace 2.查看指定命名空间中pod的基本信息:kubect ...

  9. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

最新文章

  1. Elasticsearch-02CentOS7安装elasticsearch-head插件
  2. mybatis 中case_mybatis 对string类型判断比较 group case when then 综合
  3. 2011年 11月底-12月初 51Aspx源码发布详情
  4. 零基础入门 Kubernetes,你需要知道这些
  5. java8 lambda map排序_Java8新特性第3章(Stream API)
  6. 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
  7. 修复APP的BUG,热修复的知识点和大厂的相关资料汇总
  8. IC卡CPU卡32位单片机S3系列接触式读写模块分类与性能攻略
  9. IndentationError:unindent does not match any outer indentation解决方案
  10. 吃欢天面皮的26种吃法,中国人的福音!
  11. 报错 | Error: EPERM: operation not permitted, unlink ‘C:\Users\Admin\practice\node_modules\css-loader
  12. python中pillow是什么意思_Python-pillow
  13. java 众数 中位数_什么是中位数、众数、平均数,今天终于弄明白
  14. 点阵墨水屏的使用以及图像预处理
  15. 特殊矩阵——对称矩阵(Symmetric Matrix)
  16. Android ViewFlipper 用例
  17. gmod找不到好友服务器,Garry’s Mod|Gmod服务器架设教程(二)架设沙盒模式服务器...
  18. “破晓之战”星杯传说赛后复盘分析
  19. 分支合并-rebase
  20. 判断推理----类比推理

热门文章

  1. HiveQL数据操作
  2. 20140102-lua binder另一只轮子的雏形
  3. workman php开源服务器框架初学(一)
  4. 数据结构之什么是哈希表
  5. 常用的利率定价 - jason的文章
  6. 这里有五个理由告诉你为什么飞信干不过微信业界
  7. 江苏专转本上岸后还能不能换专业
  8. 怎样做时政教育类自媒体,用这4个网站就对了
  9. sketch生成android代码,Android资源、点九图和 XML Sketch导出工具Android Res Export
  10. 渗透测试常见的默认端口