openssh

openssh

最近由于到期末,一致在忙着交结课作业,还要临时抱佛脚准备期末考试,日常熬夜到2,3点。没什么时间更新,继续旧文新更。还是一篇去年的关于ssh的文章,有关openssh的使用说明。ssh篇至此完结。

安装

安装openssh客户端

  • 默认安装了openssh客户端
  • 软件包安装:apt,yum,rpm
  • 源码编译安装,下载源码(下载支持库)

安装openssh服务器

openssh-server

配置

服务器配置

sshd_config

常用配置

基本配置

  • Port 22:  监听的端口
  • ListenAddress 0.0.0.0:  监听的地址,0.0.0.0代表监听本地的所有已经启用的IP
  • Portocol 2:  ssh协议版本号
  • LogLevel INFO:  日志级别(INFO级别)

认证相关

  • Allow user,…:  允许登陆的用户
  • Allow group,…: 允许登陆的用户组
  • Deny user,…:  禁止登陆的用户
  • Deny group,…:  禁止登陆的用户组
  • LoginGraceTime 20s:  登陆超时
  • PermitRootLogin no:  允许root登陆
  • MaxAuthTries 6:  输入密码允许次数,达到次数后一段时间不可登陆
  • MaxSessions 10:  最大同时打开会话数
  • RSAAuthentication yes:  是否启用RSA认证
  • PubkeyAuthentication yes: 是否启用公钥认证
  • PasswordAuthentication no:  是否启用密码认证
  • PermitEmptyPasswords no: 是否允许空密码登陆
  • ClientAliveInterval 300: 会话超时时间
  • ClientAliveCountMax 3:  会话超时次数判断

用户手册

名称

sshd_config:  OpenSSH SSH守护进程配置文件

描述

sshd从/etc/ssh/sshd_config(或在命令行中用-f指定配置文件)读取配置数据.该文件包含每行一个关键字-参数对.对于每个关键字,使用第一个获得的值.’#’和空行开始的行解释为注释.包含空格的参数可以使用双引号(“”)包含在内

关键字不区分大小写,参数区分大小写

关键字列表

时间格式

sshd命令行参数和配置文件选项中指定时间的参数,可以用time[qualifier]的格式表示,qualifier代表时间单位,由以下值:

- <none>    seconds 单位为空时默认为s
- s|S    seconds
- m|M    minutes
- h|H    hours
- d|D    days
- w|W    weeks

TOKENS(标记)

某些关键字的参数可以使用标记符进行传递

%%        字义的'%'本身
%D        接收到的传入连接的路由域
%F        CA密钥的指纹
%f        证书木有的指纹
%h        用户的home目录地址
%i        证书的密钥ID
%K        base64编码的CA密钥
%k        base64编码的认证密钥/证书
%s        证书序列号
%T        CA密钥的类型
%t        证书密钥的类型
%u        用户名

AuthorizedKeysCommand 接受 %%, %f, %h, %k, %t, 和 %u.

AuthorizedKeysFile 接受 %%, %h, 和 %u.

AuthorizedPrincipalsCommand 接受 %%, %F, %f, %h, %i, %K, %k, %s, %T, %t, 和 %u.

AuthorizedPrincipalsFile 接受 %%, %h, 和 %u.

ChrootDiretory 接受%%, %h, 和 %u.

RoutingDomain 接受%D.传入

文件

sshd的配置在/etc/ssh/sshd_config中,该文件只能由root用户写入,但建议是(非必须)全局可读的

服务器进程

sshd OpenSSH SSH守护进程

命令

1
sshd [-46DdeiqTt] [-C connection_spec] [-c host_certificate_file] [-E log_file] [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]

参数解释

sshd(OpenSSH Daemon)是ssh的守护进程.sshd监听来自客户端的连接,通常从/etc/rc中的启动项开始.该进程为每个传入分配一个新的守护进程

选项

-4

强制sshd仅使用IPv4地址

-6

强制sshd仅使用IPv6地址

-C connection_spec

指定用于-T扩展测试模式的连接参数.提供参数,配置文件中可能会应用的任何Match指令都将在配置写入标准输出之前应用.参数以key-value值对的形式提供.可以使用多个-C选项想或逗号分隔列表.关键字包括addr(元地址),user(用户),host(主机名),laddr(本地地址),lport(本地端口号)和rdomain(路由域)

-c host_certificate_file

指定用于在密钥交互期间证明sshd的证书路径.证书文件必须与使用-h选项或HostKey配置指令指定的主机密钥文件匹配

-D

选定该模式,sshd不会分叉并不会成为守护进程.该模式可以简易监听sshd

-d

Debug模式.服务器不会进入后台模式,发送明确的debug输出到标准错误信息.服务器不会分支并只会处理一个连接.多重-d选项增加了调试级别,最高为3

-E log_file

将调试日志写入log_file而不是系统日志

-e

将调试日志写入标准错误而不是系统日志

-f config_file

指定配置文件的名称.缺省值是/etc/ssh/sshd_config.如果没有配置文件,sshd拒绝启动

-g login_grace_time

为客户端身份验证时间进行限制(默认120秒).如果客户端在限定时间内为能对用户进行身份验证,则服务器将断开连接并退出.值为0表示没有限制

-h host_key_file

指定读取主机密钥的文件.如果sshd不是以超级用户身份运行,则必须给出该选项(因为通常主机密钥文件不能被除root以外的任何人读取).缺省值是/etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key和/etc/ssh/ssh_host_rsa_key.对于不同的主机密钥算法可能有多个主机密钥文件

-i

指定从inetd运行sshd

-o option

为可用于配置文件的格式提供选项.这对于指定没有单独的命令行标志的选项很有用.这些选项的配置值在sshd_config中

-p port

指定服务器监听连接的端口(缺省值为22).多个端口选项是允许的.当指定命令行端口时,配置文件中使用Port选项指定的设置将会被忽略.使用ListenAddress选项指定的端口会覆盖命令行端口

-q

静音模式.什么都不会发送到系统日志.通常记录每个连接的开始,认证和终止

-T

扩展测试模式.检查配置文件的有效性,将有效配置输出到标准输出流;或者通过使用一个或多个-C选项指定连接参数来应用匹配规则

-t

测试模式.只检查配置文件的有效性和密钥的完整性.对于可靠地更新sshd很有用,因为配置选项可能会更改

-u len

该选项用于指定存储远程主机名的utmp结构的字段大小.如果解析的主机名比len长,则会使用点分十进制.这允许具有很长主机名的主机溢出该字段后仍然被唯一标识.指定-u0 表示只应将点分十进制地址放入utmp文件中.-u0也可以用来防止sshd发出DNS请求,除非认证机制或配置需要.可能需要DNS身份验证机制包括HostbasedAuthentication并在密钥文件中使用from=”pattern-list”选项.需要DNS的配置选项包括在AllowUsers或DenyUsers中使用USER@HOST模式

验证

  1. sshd只支持SSH2协议.每台主机都有一个主机专用密钥,用于识别主机.每当客户端连接时,守护进程都会使用其公共主机密钥进行响应.客户端将主机密钥与自己的数据库进行比较,验证其是否更改.

  2. 通过Diffie-Hellman密钥协议提供前向安全性.该密钥协议产生共享会话密钥.会话的其余部分使用堆成加密,当前使用128位AES, Blowfish, 3DES, CAST128, Arcfour, 192位AES或256位AES.客户端选择使用服务器提供的加密算法.此外,会话完整性通关过加密消息认证代码(hmac-md5, hmac-sha1, umac-64, umac-128, hmac-sha2-256或hmac-sha2-512)提供.

  3. 服务器和客户端进入认证对话框.客户端尝试使用基于主机的身份验证,公钥身份验证,键盘交互(质询-挑战)验证或密码身份验证方式进行身份验证.

如果客户端成功进行身份验证,则会输入用于准备会话的对话框.此时,客户端可能会请求分配伪终端,转发X11连接,转发TCP连接或通过安全通道转发身份验证代理连接等操作.

此后客户端请求一个shell或执行一个命令,双方进入会话模式.此模式下,任何一方都可以随时发送数据,并将这些数据转发到服务器端的shell或命令以及客户端的用户终端

当用户程序终止且所有转发的X11和其他连接关闭时,服务器向客户端发送命令退出状态,双方退出

登陆过程

当一个用户成功登陆时,sshd将会执行:

  1. 如果登陆在tty上,且未指定任何命令,输出最后登陆时间和/etc/motd(除非文件中配置了保护选项)
  2. 如果登陆在tty上,记录登陆时间
  3. 检查/etc/nologin;如果存在,打印内容并退出(root以为)
  4. 更改以普通用户权限运行
  5. 建立级别的环境
  6. 如果文件存在,且允许用户更改其环境,读取文件~/.ssh/environment
  7. 更改用户的主目录
  8. 如果~/.ssh/rc存在并且设置了sshd_config中PermitUserRC选项,则运行它;否则,如果/etc/ssh/sshrc存在,运行它;否则运行xauth.
  9. 运行用户的shell或命令.所有的命令都在系统密码数据库中指定的用户登陆shell才可以运行

SSHRC

如果~/.ssh/rc文件存在,sh将会在读取环境配置文件后,启动用户shell或命令前执行.它不能在stdout上产生任何输出,而必须使用stderr.如果正在使用X11转发,将会在标准输入中接收到proto cookie对(并展示在X11环境中).该脚本必须调用xauth,因为sshd不会自动运行xauth来添加X11 cookie

该文件的主要目的时在用户的主目录可访问之前运行可能协议的任何初始化例程.

AUTHORIZED_KEYS文件格式

AuthorizedKeysFile指定包含 用于公钥认证的公钥 的文件;如果未指定该项,则缺省值为~/.ssh/authorized_keys 和 ~/.ssh/authorized_keys2.

文件的每一行都包含一个关键字.公钥由以下空格分隔字段组成: options, keytype, base64-encoded key, comment. options选项字段时可选的,keytype密钥类型是:“ecdsa-sha2-nistp256”, “ecdsa-sha2-nistp384”, “ecdsa-sha2-nistp521”, “ssh-ed25519”, “ssh-dss” or “ssh-rsa”中的一种;commit注释字段不用于任何功能,方便识别

sshd强制执行1024位的最小RSA密钥模数大小

选项

选项由都会分隔的规范组成.除双引号外,不需要由空格

agent-forwarding

代理转发,启用由restrict选项禁用的身份验证代理转发

cert-authority

证书中心,指定列出的密钥是可信的验证机构

command=”command”

指定只要使用该密钥进行身份验证就执行该命令.用户提供的密钥将会被忽略

environment=”NAME=value”

指定在使用该密钥登陆时要将字符串添加到环境中,此方式设置的环境变量会覆盖其他默认环境值.允许多个选项

expiry-time=”timespec”

指定密钥不会被接受的时间

from=”pattern-list”

指定除了公钥认证意外,远程主机的规范名称或其IP地址必须存在于逗号分隔的模式列表中

no-agent-forwarding

无代理转发,使用该密钥时禁止身份验证代理转发

no-port-forwarding

无端口转发,使用该密钥时禁止TCP转发.客户端的任何端口转发都会返回错误

no-pty

防止tty分配

no-user-rc

禁用~/.ssh/rc的执行

no-X11-forwarding

禁用X11转发

primitopen=”host:port”

限制使用ssh -L进行本地端口转发,使其只能连接到指定的主机和端口.可以通过将地址放在方括号中指定IPv6地址.多个规则用逗号分隔.

port-forwarding

启用由restrict选项禁用的端口转发

principals=”principals”

在cert-authority行上,以逗号分隔列表的形式指定允许的证书中心.至少一个证书机构协议存在于接受的可信机构中

pty

允许启用由restrict禁用的tty分配

restrict

启用所有限制,禁用端口,代理和X11转发,以及禁止PTY分配和执行~/.ssh/rc

tunnel=”n”

在服务器上请求tun设备.如没有该选项,客户端请求隧道,将使用下一个可用设备

user-rc

启用由restrict选项禁用的~/.ssh/rc

X11-forwarding

启用由restirct选项禁用的~/.ssh/rc

SSH_KNOWN_HOSTS文件格式

/etc/ssh/ssh_know_hosts/和~/.ssh/known_hosts文件中包含着已知主机的主机公钥.全局文件由管理员准备,并且每个用户文件都会自动维护:每当用户连接到未知主机时,其密钥都会添加到每个用户文件中

文件包含字段:markers(标记,可选项), hostnames(主机名), keytype(密钥类型), base64-encoded key(base64编码密钥), comment(注释).

markers:

标记是可选的,但如果存在该字段,则必须是认证中心cert-authority中的一个(“@cert-authority”),表明该行包含CA密钥 或”@revorked”表示该密钥在该行被撤销,不能被接收

hostnames:

主机名是逗号分隔的模式列表(‘*’和’?’为通配符);每个模式依次与主机名匹配.

模式可以使用!来表示否定:如果主机名与否定模式相匹配,即使与另一模式相匹配,也不会被接收.主机名或地址可以可选地包含在’[‘ ‘]’中,然后以’:’加非标准端口表示

或者在公开的文件中,以散列形式存储主机名并隐藏主机名和地址

keytype base64-encoded key

keytype 和 base64编码的密钥直接从主机密钥中获取,可以从/etc/ssh/ssh_host_rsa_key.pub获取.可选的注释会持续到该行结尾

客户端配置

ssh_config 客户端配置文件

概要

ssh以以下顺序获取配置信息:

  1. 命令行选项
  2. 用户的配置文件(~/.ssh/config)
  3. 系统的全局配置文件(/etc/ssh/ssh_config)

对于每个参数,将使用第一个获得的值,一般在文件开头附近提供主机特定声明,在结尾处提供默认值

使用key-value对表示参数,’#’和空行开始的行解释为注释

关键字

关键字不区分大小写,参数区分大小写

host

限制之后的参数声明仅限于给定模式匹配的主机.给定多个模式,以空格机型分隔.’*’为通配符,当个使用为所有主机提供全局默认值

可以使用’!’作为否定模式,该主机模式将会被忽略

match

只有满足match关键字后边的条件,才可以使用以后的参数声明.可用的标准关键字是:canonical, exec, host, originalhost, user 和 localuser.match条件可用单独使用,组合使用或使用’all’关键字表示全部匹配.’all’关键字只可以单独使用或在canonical后立即出现.其他关键字可用任意组合.除了canonical和all关键字,其他的关键字都需要一个参数.可用通过’!’表示否定模式.

canonical关键字只有当配置文件被主机名规范重新分析后才发生匹配.对指定只有规范主机名才可以工作很有效

exec关键字执行用户shell中指定的命令.exec接收TOKENS中定义的token作为参数

其他关键字必须是单个条目或是逗号分隔的列表,且可用使用PATTERNNS中定义的通配符和否定运算符.Hostname或CanonicalizeHostname选项中有任何替换内容,则host关键字和目标主机名进行匹配.originalhost关键字匹配命令行中指定的主机名.user关键字匹配远程主机上的目标用户名.localuser关键字匹配运行ssh的本地用户名

AddKeysToAgent

指定密钥是否应该自动添加到正在运行的ssh-agent.参数为:yes, confirm, ask 或 no.参数设置为yes,且从文件加载密钥,则密钥及其密码将添加到具有默认生命周期的代理程序.设为confirm,则每次使用密钥时都需要进行确认.设为ask,则在添加密钥之前,ssh将需要使用该SSH_ASKPASS程序进行确认.设为no,则不向文件添加密钥

AddressFamily

指定地址族,参数:any,inet,inet6

BatchMode

批处理模式,参数yes/no.设定为yes,则密码/密码查询将被禁用

BindAddress

使用本地机器上的指定地址作为连接的源地址(只用于具有多个地址的系统),如果UsePrivilegedPort设定为yes,则该项不生效.

BindInterface

使用指定接口作为连接的源地址.同上

CanonicalDomains

启用CanonicalizeHostname时,此选项指定搜索目标主机的域后缀列表

CanonicalizeFallbackLocal

指定主机名规范化失败时是否失败并报错

CanonicalizeHostname

指定是否执行明确的主机名规范化.默认设为no,不执行任何名称重写,并让系统解析器处理所有主机名查找.如果设为yes,对不适用ProxyCommand的连接,尝试使用CanonicalDomains后缀和CanonicalizePermittedCNAMEs规则对于命令行中指定的主机名进行鬼画符.设为always,将会将规范化应用于代理连接

CanonicalizeMaxDots

指定在禁用规范化之前主机名中最大点数.默认为1

CanonicalizePermittedCNAMEs

指定规则用于在主机名进行规范化时是否应遵循CNAME.

CertificateFile

指定读取用户证书的文件

ChallengeResponseAuthentication

指定是否使用挑战-应答模式验证

CheckHostIP

默认为yes,ssh将另外检查呢known_hosts文件中的主机IP地址,以检测由于DNS欺骗导致的主机密钥发生更改,且无论StrictHostKeyChecking的设置,都会将目标主机的地址增加到进程的~/.ssh/known_hosts中.

Ciphers

指定支持的加密算法和偏好顺序.多个加密方式由逗号分隔.以’+’开头,会将指定的密码追加到默认集;以’-‘开头,将指定密码移除.支持的密码:

3DES-CBC
AES128-CBC
AES192-CBC
AES256-CBC
AES128-CTR
AES192-CTR
AES256-CTR
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com

默认为

chacha20-poly1305@openssh.com, AES128-CTR,AES192-CTR,AES256-CTR,
AES128-GCM @ openssh.com,AES256-GCM @ openssh.com

ClearAllForwardings

指定清楚配置文件或命令行指定的所有本地,远程和动态端口转发

Compression

指定是否压缩

ConnectionAttempts

指定退出尝试的次数(每秒一次)

ConnectTimeout

指定连接到SSH服务器时使用的超时

ControlMaster

通过单个网络连接启用多个会话的共享

ControlPath

指定ControlMaster中用于连接共享的控制套接字的路径,或指定字符串none来禁用连接共享.

ControlPersist

与ControlMaster配合使用,指定在初始客户端连接关闭后,主链接应在后台保持打开状态(等待将来的客户端连接)

DynamicForward

指定通过安全通道转发本地计算机上的TCP端口,然后使用应用程序协议确定从远程计算机连接到的位置.参数为[bind_address:]port

EnableSSHKeysign

在全局客户端配置文件/etc/ssh/ssh_config中设定,设定为yes,在主机验证方式时,看使用帮助程序

EscapeChar

设置转移字符

ExitOnForwardFailure

指定在无法及进行转发时,应该终止连接

FingerprintHash

指定显示密钥指纹的hash算法.可选项:md5和sha256(默认)

ForwardAgent

指定身份验证代理连接是否将被转发到远程计算机

ForwardX11

指定是否通过安全通道自动重定向X11连接并进行显示设置

ForwardX11Trusted

设为yes,远程X11客户端将获得原始X11主机的完全访问权

GatewayPorts

指定是否允许元辰个主机连接到本地转发的端口.默认条件下,ssh将本地端口转发绑定到回传地址,以防止其他远程主机连接到转发的端口

GlobalKnownHostsFile

指定用于全局主机密钥数据库的一个或多个文件,用空格分隔.缺省值是/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2

GSSAPIAuthentication

指定是否允许基于GSSAPI的用户认证

GSSAPIDelegateCredentials

转发(委托)凭据到服务器

HashKnownHosts

设定ssh将地址添加到~/.ssh/known_hosts时,是否hash主机名和地址

HostbasedAuthentication

指定是否尝试使用基于rhosts的公钥认证方法

HostbasedKeyTypes

以逗号分隔的模式列表指定基于主机的身份验证的密钥类型.默认值为:

ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,ssh-rsa

HostKeyAlgorithms

指定客户端使用的主机密钥算法的顺序,默认值为:

ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,ssh-rsa
可使用”ssh -Q key”查询可用密钥类型

HostKeyAlias

指定在主机密钥数据库文件中查看或保存主机密钥以及验证主机证书时,指定使用别名而不是实际主机名

Hostname

指定要登陆的真是主机名.可用来指定主机的昵称或缩写.参数接收TOKENS中的token.数字IP地址也是允许的.默认值是命令行中给出的名称

IdentitiesOnly

设定为ssh只能使用在shh_config文件中显式配置或在命令行上传递的身份认证和证书文件

IdentityAgent

指定用于与身份验证代理进行通信的UNIX-domain套接字.该选项覆盖SSH_AUTH_SOCK环境变量,可用于选择特定的代理.将套接字名称设置为”none”会禁用身份验证代理的使用.指定”SSH_AUTH_SOCK”将从SSH_AUTH_SOCK中读取位置

IdentityFile

指定读取用户的DSA,ECDSA,Ed25519或RSA认证标识的文件.默认值为~/.ssh/id_dsa. ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519, ~/.ssh/id_rsa.

IgnoreUnknown

如果在配置解析中遇到未知选项,则指定要忽略的未知选项的模式列表.尽早列在配置文件中(不会识别在其之前的未知选项)

Include

包含指定的配置文件.可指定多个路径名,可含通配符,对用户配置,可用包含对用户主目录的’~’shell的引用.如果在系统配置文件中,包含/etc/ssh

IPQoS

指定用于连接的IPv4服务类型或DSCP类.可用选择一个或两个参数,空格分隔.一个参数,用作包类;两个参数,第一个为交互式会话,第二个为非交互式会话

KbdInteractiveAuthentication

指定是否使用键盘交互身份验证方式

KbdInteractiveDevices

指定在键盘交互身份验证中使用的方法列表.多个方法名称用逗号分隔.可能是空或多个:bsdauth,pam和skey

KexAlgorithms

指定可用的KEX(密钥交换)算法.多个算法用逗号分隔.默认值是:

curve25519-sha256,curve25519-sha256@libssh.org, ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
diffie-hellman-group16-sha512,
diffie-hellman-group18-sha512,
diffie-hellman-group-exchange-sha1,
diffie-hellman-group14-sha256,
diffie-hellman-group14-sha1

LocalCommand

指定成功连接到服务器后在本地计算机上执行的命令.命令字符串延伸到行的末尾,并于用户的shell一起执行

LocalForward

指定本地计算机上的TCP端口通过安全通道转发到远程计算机的指定主机和端口.第一个参数必须是[bind_address:]port,第二个参数必须是host:port.可通过将地址放在方括号中指定IPv6地址

LogLevel

提供从ssh记录消息时使用的详细级别

MACs

指定MAC算法的优先顺序.默认值为:

umac-64-etm@openssh.com,umac-128-etm@openssh.com,
hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,
hmac-sha1-etm@openssh.com, umac-64@openssh.com,umac-128@openssh.com,
hmac-sha2-256,hmac-sha2-512,hmac-sha1

NoHostAuthenticationForLocalhost

禁用本地主机的主机认证(环回地址)

NumberOfPasswordPrompts

指定放弃访问的密码尝试次数,默认为3

PasswordAuthentication

设定设否使用密码认证方法

PermitLocalCommand

允许通过LocalCommand选项执行本地命令或使用’!command’在ssh中转义

PKCS11Provider

指定选用的PKCS#11提供者.该关键字的参数是ssh用PKCS#11共享库与存储用户RSA私钥的PKCS#11令牌进行通信

Port

指定在远程主机上使用的端口号,默认为22

PreferredAuthentications

指定客户端尝试验证方法的顺序.这使得客户端可用选择更偏好的验证方法.默认值是:

gssapi-with-mic,hostbased,publickey,
keyboard-interactive,password

ProxyCommand

指定用于连接到服务器的参数.命令字符串追加到行尾,并使用用户shell exec指令执行,以避免延迟shell进程.命令设置为none将禁用该选项.参数接受TOKENS中的token.冲动标准输入读取并写入标准输出.应连接到某台机器上运行的sshd服务器或在某处执行sshd -i

ProxyJump

以[user@]host[:port]或ssh URI形式指定一个或多个跳转代理.多个代理可用逗号分隔,且会顺序访问.该选项导致ssh先于指定的跳板主机建立ssh连接,然后建立向最终目标的TCP转发,与目标主机建立连接

ProxyUseFdpass

指定ProxyCommand将连接的文件描述符传递回ssh,而不是继续执行并传递数据

PubkeyAcceptedKeyTypes

指定接收公钥的密钥类型,默认值为:

ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,ssh-rsa

PubkeyAuthentications

设定是否使用公钥验证方法

RekeyLimit

指定在会话密钥重新协商之前可用传输的最大数据量,可选项指定最大时间.第一个参数是最大数据量,以字节为单位(K,M,G),默认值在1G到4G之间.第二个可选参数是最大时间,以秒为单位,可使用TIME FORMATS中指定的任何单位

RemoteCommand

指定成功连接到服务器后在远程计算机上执行的命令.命令字符串追加到行的末尾,并与用户的shell一起执行

RemoteForward

指定通过安全通道转发远程计算机上的TCP端口.远程端口可用从本地计算机转发到指定的主机和端口;也可用充当SOCK4/5代理使远程客户端从本地连接到任意目标.第一个参数必须是[bind_address:]port;如果转发到特定的目标,则第二个参数必须是host:hostport,如果没有指定目标参数,则远程转发将被建立SOCKS代理

可用通过将地址放在[]中指定IPv6地址.可用指定多个转发,并在命令行上提供额外的转发.只有在远程计算机上使用root身份登陆,才能转发特权端口

如果port参数为0,则监听端口将在服务器上动态分配并在运行时报告给客户端

如果未指定bind_address,则默认仅绑定到回传地址.如果bind_address是’*’或一个空字符串,则转发请求在所有端口上监听.

RequestTTY

指定是否为会话请求伪终端.参数为:no,yes,force 或 auto.

RevokedHostKeys

指定撤销的主机公钥.此文件中列出的密钥将会被拒绝进行主机验证.将密钥指定为文本文件,每行列出一个公钥.如果此文件不存在或不可读,则所有主机都将拒绝主机身份验证

SendEnv

指定应将哪些本地环境变量发送到服务器.

ServerAliveCountMax

设置客户端未从服务器接收到任何返回信息的情况下服务器活动状态消息最大数量,达到数量时客户端端口服务器连接,并终止会话

ServerAliveInterval

设置以秒未单位的超时时间.超时后,如果没有从服务器收到数据,ssh将通过加密通道发送消息请求服务器的响应.默认为0,表示不发送

StreamLocalBindMask

设置为本地或远程端口转发创建Unix域套接字文件时的权限掩码umask.缺省值时0177,创建一个只能由所有者读写的Unix域套接字文件

StreamLocalBindUnlink

设置在创建新的Unix域套接字文件前是否删除现有的用于本地或远程端口转发的套接字文件

StrictHostKeyChecking

如果此标志设为”yes”,ssh将不会自动将主机密钥添加到~/.ssh/known_hosts文件,并拒绝连接到主机密钥已更改的主机.为避免中间人攻击提供保护.

如果设为”accept-new”,则ssh将自动将新主机密钥添加到用户已知的主机密钥,但不允许连接到已更改的主机.

如果设为”no”或”off”则ssh会自动将新主机密钥添加到用户已知主机文件中,并允许主机密钥更改的主机在限制条件下连接.
如果设为”ask”,则只有在用户确认了该行为后才会将新主机密钥添加到用户已知主机文件中,并将拒绝主机密钥已改变的主机

SyslogFacility

给出记录ssh日志消息的设备代码.有效值为:DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. 默认值是USER.

TCPKeepAlive

指定系统是否向另一端发送TCP保持活动消息.发送该消息,如果连接死机或某台机器崩溃将会被反馈得知

Tunnel

在客户端和服务器之间请求设备转发.参数是: yes, point-to-point (第三层), ethernet (第二层), or no (默认).yes请求默认隧道模式,即point-to-point(点对点)模式

TunnelDevice

指定要在客户端(local_tun)和服务器(remote_tun)上打开的隧道tun设备.参数是local_tun[:remote_tun]这些设备可用数字ID或关键字”any”来指定.默认为any:any

UpdateHostKeys

规定ssh是否接收来自其他服务器沿着国通的新增主机密钥通知并将其加入已知主机文件中.

UsePrivilegedPort

规定是否将特权端口用于传出连接.默认为no,设为yes则ssh必须是root用户

User

指定登陆用户.

UserKnownHostsFile

指定用于主机密钥数据库的一个或多个文件,用空格分隔.默认为~/.ssh/known_hosts, ~/.ssh/known_hosts2

VerifyHostKeyDNS

指定是否使用DNS和SSHFP资源记录验证远程密钥.设置为yes,客户端将默认信任来自DNS的能够匹配安全指纹的密钥,并与设为ask一样处理不安全的指纹.设为ask,将会显示有关指纹匹配的信息,但用户仍然需要根据StrictHostKeyChecking选项确认新的主机密钥.

VisualHostKey

如果设为yes,则除了登陆时的指纹字符串和未知主机密钥意外,还会打印的ASCII art形式的远程主机密钥指纹

XAuthLocation

指定xauth程序的完整路径名

TOKENS(标记)

参数接受的标记为:

%%    字面的%
%C    %l%h%p%r的哈希值
%d    本地用户的home(~)目录
%h    远程主机名
%i    本地用户ID
%L    本地主机名
%l    本地主机名,包含域名
%n    原始远程主机名,如命令行所示
%p    远程端口
%r    远程用户名
%T    如果请求隧道转发,则分配本地tun(4)或tap(4)网络接口,否则为"NONE"
%u    本地用户名

Match exec 接受标记: %%, %h, %L, %l, %n, %p, %r, 和 %u.

CertificateFile 接受标记: %%, %d, %h, %l, %r, 和 %u.

ControlPath 接受标记: %%, %C, %h, %i, %L, %l, %n, %p, %r, 和 %u.
HostName 接受标记: %% 和 %h.
IdentityAgent 和IdentityFile 接受标记: %%, %d, %h, %l, %r, 和 %u.
LocalCommand 接受标记: %%, %C, %d, %h, %l, %n, %p, %r, %T, 和 %u.
ProxyCommand 接受标记: %%, %h, %p, 和 %r.
RemoteCommand 接受标记: %%, %C, %d, %h, %l, %n, %p, %r, 和 %u.

客户端进程

ssh:OpenSSH SSH客户端(远程登陆程序)

命令

ssh    [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command]

参数解释

-4

强制sshd仅使用IPv4地址

-6

强制sshd仅使用IPv6地址

-A

启用身份验证代理连接的转发.也可以在每个主机的基础配置文件中设定

-a

禁用转发身份验证代理连接

-B bind_interface

尝试连接到远程主机的监听bind_interface接口

-b bind_address

使用本地的bind_address作为连接的源地址

-C

请求压缩所有数据.压缩算法与gzip使用的算法相同

-c cipher_spec

选择用于加密会话的密码规范.按优先顺序列出以逗号分隔的密码列表

-D [bind_address:]port

指定本地动态应用层端口转发.通过分配一个套接字监听本地端口port,可选地绑定到指定的监听地址bind_address.只要连接到此端口,就会通过安全通道转发连接,然后使用应用层协议确定从远程计算机连接到本地的位置.目前支持SOCKS4和SOCKS5,ssh充当SOCKS服务器.只有root可以转发特权端口.

-E log_file

将调试日志写入log_file中,而不输出到标准错误stderr中.

-e escape_char

设置在pty上进行会话的转义符(默认为”*”).只有行首的转义符才会被识别.在转义符后跟一个点(‘.’)关闭连接;跟随control-Z暂停连接;跟随该字符本身,发送一个转义字符.将该项设为”none”将禁用任何转义

-F configfile

指定一个可选的单个用户的配置文件.如果在命令行上给出配置文件,则系统的配置文件(/etc/ssh/ssh_config)将被忽略.用户的默认配置文件是~/.ssh/config

-f

请求ssh在命令执行前转到后台.在ssh询问口令或密码,但用户希望ssh在后台运行时很有用.在远程主机启动X11进程的推荐方式时使用ssh -f host xterm的方法

-G

让ssh在评估Host和Match块后打印其配置并退出

-g

运行远程主机连接到本地转发的端口.如果在多路复用连接上使用,则必须在主进程上指定此选项

-I pkcs11

指定ssh用于与PKCS#11令牌通信提供用户私钥所使用的PKCS#11共享库

-i identity_file

选择读取公钥认证方法的证明(即私钥)的文件.默认为~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 和 ~/.ssh/id_rsa.私钥所在文件也可以在配置文件中以主机为目标指定.可以由多个-i选项(以及配置文件中指定的多个身份).如果CertificateFile项没有明确指定证书,则ssh会尝试从加载-cert.pub获得的文件名来识别加载证书文件

-J destination

先与destination描述的跳转主机进行ssh连接,然后在跳转主机建立到最终目的地的TCP转发,实现连接目标主机.可以用逗号字符指定多个跳转节点.时指定ProxyJump配置的快捷方法

-K

启用基于GSSAPI的身份验证并将GSSAPI凭据转发到服务器

-k

禁用GSSAPI凭据转发到服务器

-L [bind_address:]port:host:hostport

-L [bind_address:]port:remote_socket

-L local_socket:host:hostport

-L local_socket:remote_socket

指定到本地主机(客户端)上给定TCP端口或Unix套接字的连接将转发到远程端的给定主机和端口或Unix套接字.

-I login_name

指定要在远程计算机上登陆的用户.

-M

将ssh客户端置为”master”模式进行连接共享

-m mac_spec

MAC算法按优先级指定的逗号分隔列表

-N

不执行远程命令,对转发端口很有用

-n

重定向标准输入stdin到/dev/null(防止从stdin读取).在ssh在后台运行时必须使用

-O ctl_cmd

控制活动连接复用进程.指定-O参数时,将解释ctl_cmd参数并将其传递给主进程.有效命令是:”check”,”forward”,”cancel”,”exit”和”stop”.

-o option

用于给出配置文件中使用的选项.选项列表为:

AddKeysToAgent
AddressFamily
BatchMode
BindAddress
CanonicalDomains
CanonicalizeFallbackLocal
CanonicalizeHostname
CanonicalizeMaxDots
CanonicalizePermittedCNAMEs
CertificateFile
ChallengeResponseAuthentication
CheckHostIP
Ciphers
ClearAllForwardings
Compression
ConnectionAttempts
ConnectTimeout
ControlMaster
ControlPath
ControlPersist
DynamicForward
EscapeChar
ExitOnForwardFailure
FingerprintHash
ForwardAgent
ForwardX11
ForwardX11Timeout
ForwardX11Trusted
GatewayPorts
GlobalKnownHostsFile
GSSAPIAuthentication
GSSAPIDelegateCredentials
HashKnownHosts
Host
HostbasedAuthentication
HostbasedKeyTypes
HostKeyAlgorithms
HostKeyAlias
HostName
IdentitiesOnly
IdentityAgent
IdentityFile
IPQoS
KbdInteractiveAuthentication
KbdInteractiveDevices
KexAlgorithms
LocalCommand
LocalForward
LogLevel
MACs
Match
NoHostAuthenticationForLocalhost
NumberOfPasswordPrompts
PasswordAuthentication
PermitLocalCommand
PKCS11Provider
Port
PreferredAuthentications
ProxyCommand
ProxyJump
ProxyUseFdpass
PubkeyAcceptedKeyTypes
PubkeyAuthentication
RekeyLimit
RemoteCommand
RemoteForward
RequestTTY
SendEnv
ServerAliveInterval
ServerAliveCountMax
StreamLocalBindMask
StreamLocalBindUnlink
StrictHostKeyChecking
TCPKeepAlive
Tunnel
TunnelDevice
UpdateHostKeys
UsePrivilegedPort
User
UserKnownHostsFile
VerifyHostKeyDNS
VisualHostKey
XAuthLocation

-p port

远程主机连接的目标端口

-Q query_option

查询ssh以获得支持ssh2的算法.可用的功能有:cipher(受支持的堆成加密方法) ,cipher-auth(支持的认证加密方法) ,mac(支持的mac算法) ,kex(密钥交互算法) ,key(密钥类型) ,key-cert(证书密钥类型) ,key-plain(无证书密钥类型),和protocol-version(支持的SSH协议版本)

-q:

静音模式.导致大多数警告和诊断消息不显示

-R [bind_address:]port:host:hostport

-R [bind_address:]port:local_socket

-R remote_socket:host:hostport

-R remote_socket:local_socket

-R [bind_address:]port

指定到远程主机(服务器)上给定的TCP端口或Unix套接字将被转发到本地端.通过分配套接字来监听TCP端口port或远程Unix套接字,并且从本地机器连接到由主机host或local_socket指定的显示目标;如果没有明确的目标指定,SSH作为一个SOCKS4/5代理

-S ctl_path

指定用于连接共享的控制套接字的位置,或者none禁用共享连接

-s

可用于请求调用远程系统上的子系统.

-T

禁用伪终端分配

-t

强制伪终端分配.可用于在远程机器上执行任意基于屏幕的程序

-V

显示版本号并退出

-v

详细模式.使ssh打印有关进程的调试信息.

-W host:port

请求在客户端的标准输入和标准输出通过安全通道转发到主机host上端口port

-w local_tun[:remote_tun]

使用指定的tun设备在客户端(local_tun)和服务器(remote_tun)之间请求隧道转发

-X

启用X11转发

-x

禁用X11转发

-Y

启用可信的X11转发

-y

使用syslog系统模块发送日志信息.默认情况下,日志信息发送到stderr

ssh-keygen

ssh-keygen:身份验证密钥生成,管理和转换

命令

1.

1
ssh-keygen	[-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa] [-N new_passphrase] [-C comment] [-f output_keyfile]

-q:

静默调用ssh-keygen 在创建新密钥时由/etc/rc调用

-b bits:

指定要创建的密钥的位数.RSA最小1024位,默认2048位.DSA必须符合FIPS 186-2规定的1024位.ECDSA通过从三个椭圆曲线大小中选择一个确定该密钥长度:256/384/521位(其他长度会失败).Ed25519具有固定长度,-b标志被忽略

-t dsa | ecdsa | ed25519 | rsa:

指定要创建的密钥的类型

-N new_passphrase:

提供新的密码

-C comment:

注释

-f filename(output_keyfile):

文件名,这里用于输出密钥的文件名

2.

ssh-keygen    -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

-p:

请求更改私钥文件的密码.程序提示输入包含私钥的文件,旧密码以及新密码两次

-P passphrase(old_passphrase):

提供密码,这里用于提供旧密码

3.

1
ssh-keygen	-i [-m key_format] [-f input_keyfile]

-i:

以-m选项指定的格式读取未加密的私钥/公钥文件,并将与OpenSSH兼容的私钥/公钥输出到标准输出stdout.允许从其他软件导入密钥.默认导入格式是”RFC4716”

-m key_format:

指定导入(-i)或导出(-e)转换选项的密钥格式.支持的密钥格式是:”RFC4716”,”PKCS8”或”PEM”.默认的转换格式是”RFC4716”

4.

1
ssh-keygen	-e [-m key_format] [-f input_keyfile]

-e:

读取OpenSSH公钥或私钥文件,并以-m选项指定的格式输出该密钥.默认的到处格式是”RFC4617”.允许到处OpenSSH密钥宫其他程序使用.

5.

1
ssh-keygen	-y [-f input_keyfile]

-y:

读取一个OpenSSH格式私钥并输出对应的OpenSSH公钥文件

6.

1
ssh-keygen	-c [-P passphrase] [-C comment] [-f keyfile]

-c:

请求更改私钥和公钥文件中的注释.仅支持比较新的OpenSSH格式存储的密钥.将提示输入包含私钥的文件,密钥的密码及新注释

7.

1
ssh-keygen	-l [-v] [-E fingerprint_hash] [-f input_keyfile]

-l:

显示指定公钥的指纹.对于RSA和DSA密钥,会尝试查找匹配的公钥文件并打印其指纹.如果与-v结合使用个,会提供可视化的ASCII art形式的指纹图

-v:

详细模式.让ssh-keygen打印有关其进度的调试信息.多个-v选项增加详细程度,最大值为3

-E fingerprint_hash:

指定显示密钥指纹时的散列算法.有效选项:”md5”和”sha256”.默认为”sha256”

8.

1
ssh-keygen	-B [-f input_keyfile]

-B:

显示指定私钥/公钥文件的bubble babble编码的摘要

9.

1
ssh-keygen	-D pkcs11

-D pkcs11:

下载由PKCS#11共享库pkcs11提供的RSA公钥.与-s一起使用,表示CA密钥主流在PKCS#11令牌中

10.

1
ssh-keygen	-F hostname [-f known_hosts_file] [-l]

-F hostname:

在knewn_hosts文件中搜索指定的主机名hostname,列出找到的所有项.配合-H选项以hash格式打印找到的密钥

11.

1
ssh-keygen	-H [-f known_hosts_file]

-H:

hash一个known_hosts文件.将用指定文件中的hash表示体会所有主机名和地址;原始内容将被移到具有.old后缀的文件.hash值可以被ssh和sshd正常使用

12.

1
ssh-keygen	-R hostname [-f known_hosts_file]

-R hostname:

从known_hosts文件中删除属于hostname的所有密钥

13.

1
ssh-keygen	-r hostname [-f input_keyfile] [-g]

-r hostname:

打印指定公钥文件的hostname的SSHFP指纹资源记录

14.

1
ssh-keygen	-G output_file [-v] [-b bits] [-M memory] [-S start_point]

-G output_file:

为DH-GEX生成候选素数.这些素数在使用前必须进行安全筛选(-T)

-M memory:

为DH-GEX生成候选模数时,指定要使用的内存大小(以M字节为单位)

-S start_point:

为DH-GEX生成候选模数时指定起始点(十六进制)

15.

1
ssh-keygen	-T output_file -f input_file [-v] [-a rounds] [-J num_lines] [-j start_line] [-K checkpt] [-W generator]

-T output_file:

测试DH组交换候选素数(使用-G选项生成)以确保安全

-a rounds:

当保存新格式私钥(即ed25519密钥或设置-o选项)时,指定使用的KDF(密钥导出函数)循环次数.较高的次数导致密码验证较慢,但对清理密码破解的抵抗力增加.

当筛选DH-GEX候选模数时(-T命令).该选项指定要执行的素性测试的次数.

-J num_lines:

在使用-T选项执行DH候选模数筛选时筛选指定的行数后退出

-K checkpt:

在使用-T选项执行DH候选模数筛选时将最后一行的筛选进程写入checkpt.如果作业重新启动,将用于跳过输入文件中已处理的行

-W generator:

在测试DH-DEX的候选模量时指定所需的发生器

16.

1
ssh-keygen	-s ca_key -I certificate_identity [-h] [-U] [-D pkcs11_provider] [-n principals] [-O option] [-V validity_interval] [-z serial_number] file ...

-s ca_key:

使用指定的CA密钥对公钥进行认证(签名).在生成KRL时,-s指定用于通过密钥ID或序列号直接撤销证书的CA公钥文件的路径

-I certificate_identity:

签署公钥时指定密钥身份

-h:

签署密钥时,创建主机证书而不是用户证书

-U:

与-s一起使用时,此选项表示CA密钥主流在ssh-agent中

-n principals:

在签署密钥时指定一个或多个委托人(用户名或主机名)包含在证书中.可用指定多个委托人,以逗号分隔

-O option:

签署密钥时指定过一个证书选项.有效选项为:

clear: 清除所有启用的权限
critical:name[=contents]
extension:name[=contents]
包含任意证书关键选项或扩展名.指定的name应包含域名后缀(“name@example.com“).如果contents被指定,它作为扩展名/选项的内容以字符串格式编码被包含.
force-command=command
当使用证书进行身份验证时,强制执行command而不是用户指定的任何shell或命令
no-agent-forwarding
禁用代理转发
no-port-forwarding
禁用端口转发
no-pty
禁用pty分配
no-user-rc
禁用通过sshd执行/.ssh/rc
no-X11-forwarding
禁用X11转发(以上禁用选项默认允许)
permit-agent-forwarding
允许ssh-agent转发
permit-port-forwarding
允许端口转发
permit-port-pty
允许分配pty
permit-user-rc
允许通过sshd执行
/.ssh/rc
permit-X11-forwarding
允许X11转发
source-address=address_list
限制证书认为有效的源地址.ADDRESS_LIST时逗号分隔的CIDR格式的一个或多个地址/网络掩码对的列表

-V validity_interval:

签署证书时指定一个有效期间.一个有效时间间隔可用由单个时间组成,表面证书从现在开始有效并在那个时间到期;或由两个用冒号分隔指示明确的时间间隔

-z serial_number:

指定要嵌入证书中的序列号,以将此证书与同一CA中的其他证书区分开来.默认为0.当生成KRL时,-z标志用于指定KRL版本号

17.

1
ssh-keygen	-L [-f input_keyfile]

-L:

打印一个或多个证书的内容

18.

1
ssh-keygen	-A [-f prefix_path]

-A:

对于每个不存在主机密钥的密钥类型(rsa,dsa,ecdsa和ed25519),使用默认密钥文件路径,空密码,密码类型的默认位数和默认注释生成主机密钥.如果还指定-f,则其参数将用作生成规定主机密钥文件的默认路径的前缀.该项又/etc/rc用于产生新的主机密钥

19.

1
ssh-keygen	-k -f krl_file [-u] [-s ca_public] [-z version_number] file ...

-k:

生成一个KRL文件.在该模式下,ssh-keygen将在通过-f标志指定的位置生成一个KRL文件,该文件撤销命令行中显示的每个密钥或证书.

20.

1
ssh-keygen	-Q -f krl_file file ...

-Q:

测试密钥是否在KRL中被撤销.

模块生成

ssh-keygen可用于为Diffie-Hellman组交换(DH-GEX)协议生成组.生成组的过程:先使用快速但内存密集的进程生成候选素数,然后对候选素数进行适应性测试(CPU密集型进程)

使用-G选项执行素数的生成,长度由-b选项指定

#ssh-keygen -G moduli-2048.candidates -b 2048

默认情况下,搜索素数从所需长度范围内的随机点开始.可使用-S选项覆盖,指定不同的起点

产生了一组候选素数后,开始筛选适合性.使用-T选项执行.从标准输入(或-f指定文件)读取候选项.

#ssh-keygen -T modulic-2048 -f moduli-2048.candidates

默认情况下,每个候选素数将受到100次素性测试.可使用-a选项覆盖.如果需要特定的生成器,可用使用-W选项,有效的生成器是2,3,5

证书

ssh-keygen支持签署密钥以生成可用用于用户或主机身份验证的证书.证书由公钥,身份信息,0或多个主体(用户或主机)名称以及证书颁发机构(CA)密钥签署的一组选项组成.然后,客户或服务器可用仅新人CA密钥并在证书上验证其签名.

ssh-keygen支持两种类型的证书:用户和主机.用户证书将用户认证到服务器,主机证书向用户认证服务器主机

ssh-keyscan

ssh-keyscan 收集SSH公钥

ssh-keyscan 是一个用于收集各个主机的SSH主机公钥的程序.功能是帮助构建和验证ssh_known_hosts文件,其格式记录在sshd中.提供了一个适用于shell和perl脚本的最小界面

ssh-keyscan使用非阻塞套接字I/O来并行连接尽可能多的主机,因此非常搞笑.即使某些主机关闭或不运行sshd,也可以在几十秒内收集1000个主机域中的密钥

命令与参数

1
ssh-keyscan	[-46cDHv] [-f file] [-p port] [-T timeout] [-t type] [host | addrlist namelist]

参数解释

-4

强制ssh-keyscan 仅使用IPv4地址

-6

强制ssh-keyscan仅使用IPv6地址

-c

从目标主机请求证书而不是普通密钥

-D

打印以SSHFP DNS记录形式找到的密钥.默认将在ssh known_hosts文件可用格式下打印密钥

-f file

从file读取主机或”addrlist namelist”对.如果提供’-‘而不是文件名,ssh-keyscan将从标准输入中读取.
预期输入的格式为:

1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4

-H

在输出中hash所有主机名和地址.hash名称可在ssh和sshd中正常使用,且公开后不会透漏任何关键信息

-p port

连接到远程主机的端口

-T timeout

设置尝试连接的超时时间.默认5秒

-t type

指定要从扫描的主机获取的密钥的类型.可能的值为: “dsa”, “ecdsa”, “ed25519”, 或 “rsa”. 默认为”rsa”,”ecdsa”和”ed25519”

-v

详细模式:打印调试信息

ssh-keysign

ssh-keysign:用于基于主机的身份验证的ssh帮助程序

描述

ssh使用ssh-keysign访问本地主机密钥,并生成在主机身份验证方式中需要的数字签名

ssh-keysign默认被禁用,只能通过在全局客户端配置文件/etc/ssh/ssh_config中配置选项EnableSSHKeysign为”yes”才会启用

ssh-keysign不会由用户调用,而是从ssh中调用

ssh-agent

ssh-agent 认证代理

ssh-agent 是一个保存用于公钥验证方式的私钥的程序.ssh-agent通常在X-session或登陆会话时启动,其他窗口或程序都作为ssh-agent的客户端启动.通过使用环境变量,代理可以被定为并在ssh登陆到其他机器时自动认证

ssh-agent最初没有任何私钥.使用ssh或ssh-add添加密钥.多个身份可用同时存储在ssh-agent中,且ssh会自动使用存在的身份.ssh-add也可以从ssh-agnet中移除密钥并查询保存在其中的密钥

命令与参数

1
2
3
ssh-agent	[-c | -s] [-Dd] [-a bind_address] [-E fingerprint_hash] [-P pkcs11_whitelist] [-t life] [command [arg ...]]

ssh-agent [-c | -s] -k

参数解释

-a bind_address

将代理绑定到UNIX域套接字bind_address.默认值为$TMPDIR/XXXXXXXXXX/agent.

-c

在标准输出stdout上生成C-shell命令.如果shell看起来是csh风格的,这是默认项

-D

前景模式.在该选项被指定时,ssh-agent不会分叉

-d

调试模式.在该选项被指定时,ssh-agent不会分叉,并将调试信息写入标准错误stderr

-E fingerprint_hash

指定打印密钥指纹时的散列算法.有效选项是:”md5”和”sha256”.默认值是”sha256”

-k

杀掉当前代理(由SSH_AGENT_PID环境变量给出)

-P pkcs11_whitelist

为可用使用-s选项添加到ssh-add的PKCS#11共享库指定可接受路径的模式列表.默认允许从“/usr/lib/*,/usr/local/lib/*”加载PKCS#11库.与白名单不匹配的PKCS#11库将被拒绝

-s

在标准输出stdout中生成Bourne shell命令.如果shell看起来不是csh风格的代码,则该项为默认项

-t life

为添加到代理的身份设定默认的最长生存周期.以秒或ssh_config中指定的时间格式为单位