文章目录

  • 前言
  • 一、SSH是什么?
  • 二、安装openssh
  • 三、SSH客户端
    • 1.前置知识
    • 2.连接过程
    • 3.服务器变更
    • 4.参数选择
    • 5.配置文件
    • 6.可选的配置选项
  • 四、服务器
    • 1.前置知识
    • 2.配置文件
    • 3.密钥
    • 4.可选命令
    • 5.可用配置项
  • 结尾

教程推荐:

人工智能教程,点击这里查看,通俗易懂,风趣幽默

C/C++教程,点击这里查看,以项目为主导从入门到精通

前言

我目前环境是windows 子系统 Ubuntu 20.04.4 LTS ,以及windows 11,不同版本的系统之间可能有一些差异,需要自己探索。

本文内容较长,可根据自己的需要点击上方目录跳转到指定的位置

但如果是新手使用,建议从头看一下,但命令项与可用配置项方面的内容非常多,可在自己有需要的时候选取即可

一、SSH是什么?

SSH(Secure Shell 的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。

实务中,它主要用于保证远程登录和远程通信的安全,任何网络服务都可以用这个协议来加密。

需要注意的是,ssh是一种协议,而通常我们说的是实现了这种协议的软件,例如知名的openssh

二、安装openssh

一般linux系统都自带ssh,如果没有就可以安装一下

sudo apt update        #更新数据
sudo apt upgrade        #更新软件
sudo apt install openssh-server  #下载安装ssh服务的服务器
sudo apt install openssh-client  #下载安装ssh服务的客户端

这里给出的是ubuntu安装命令,其它系统请参考具体的安装命令

windows一般自带ssh客户端,如果没有可以参照以下官方文档教程进行安装

三、SSH客户端

1.前置知识

位置:

ubuntu 系统的位置是/usr/bin/ssh。
Windows系统的位置是C:\Program Files\OpenSSH-Win64\ssh.exe

用法:

ssh 最常见的用途就是登录服务器,这要求服务器安装并正在运行 SSH 服务器软件。

ssh 登录服务器的命令如下。

ssh hostname

上面命令中,hostname是主机名,它可以是域名,也可能是 IP 地址或局域网内部的主机名。不指定用户名的情况下,将使用客户端的当前用户名,作为远程服务器的登录用户名。如果要指定用户名,可以采用下面的语法。

ssh user@hostname

上面的命令中,用户名和主机名写在一起了,之间使用@分隔。

用户名也可以使用ssh的-l参数指定,这样的话,用户名和主机名就不用写在一起了。

ssh -l username host

ssh 默认连接服务器的22端口,-p参数可以指定其他端口。

ssh -p 8821 foo.com

上面命令连接服务器foo.com的8821端口

2.连接过程

ssh 连接远程服务器后,首先有一个验证过程,验证远程服务器是否为陌生地址。

如果是第一次连接某一台服务器,命令行会显示一段文字,表示不认识这台机器,提醒用户确认是否需要连接。

The authenticity of host 'foo.com (192.168.121.111)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)?

上面这段文字告诉用户,foo.com这台服务器的指纹是陌生的,让用户选择是否要继续连接(输入 yes 或 no)。

所谓“服务器指纹”,指的是 SSH 服务器公钥的哈希值。每台 SSH 服务器都有唯一一对密钥,用于跟客户端通信,其中公钥的哈希值就可以用来识别服务器。

下面的命令可以查看某个公钥的指纹。

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 da:24:43:0b:2e:c1:3f:a1:84:13:92:01:52:b4:84:ff   (ECDSA)

上面的例子中,ssh-keygen -l -f命令会输出公钥/etc/ssh/ssh_host_ecdsa_key.pub的指纹。

ssh 会将本机连接过的所有服务器公钥的指纹,都储存在本机的~/.ssh/known_hosts文件中。每次连接服务器时,通过该文件判断是否为陌生主机(陌生公钥)。

在上面这段文字后面,输入yes,就可以将当前服务器的指纹也储存在本机~/.ssh/known_hosts文件中,并显示下面的提示。以后再连接的时候,就不会再出现警告了。

Warning: Permanently added 'foo.com (192.168.121.111)' (RSA) to the list of known hosts

然后,客户端就会跟服务器建立连接。接着,ssh 就会要求用户输入所要登录账户的密码。用户输入并验证密码正确以后,就能登录远程服务器的 Shell 了。

3.服务器变更

服务器指纹可以防止有人恶意冒充远程主机。如果服务器的密钥发生变更(比如重装了 SSH 服务器),客户端再次连接时,就会发生公钥指纹不吻合的情况。这时,客户端就会中断连接,并显示一段警告信息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
77:a5:69:81:9b:eb:40:76:7b:13:04:a9:6c:f4:9c:5d.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending key in /home/me/.ssh/known_hosts:36

上面这段文字的意思是,该主机的公钥指纹跟~/.ssh/known_hosts文件储存的不一样,必须处理以后才能连接。这时,你需要确认是什么原因,使得公钥指纹发生变更,到底是恶意劫持,还是管理员变更了 SSH 服务器公钥。

如果新的公钥确认可以信任,需要继续执行连接,你可以执行下面的命令,将原来的公钥指纹从~/.ssh/known_hosts文件删除。

ssh-keygen -R hostname

上面命令中,hostname是发生公钥变更的主机名。

除了使用上面的命令,你也可以手工修改known_hosts文件,将公钥指纹删除。

删除了原来的公钥指纹以后,重新执行 ssh 命令连接远程服务器,将新的指纹加入known_hosts文件,就可以顺利连接了。

4.参数选择

-c参数指定加密算法

ssh -c blowfish,3des server.example.com

或者

ssh -c blowfish -c 3des server.example.com

上面命令指定使用加密算法blowfish或3des。

-C表示压缩数据传输。

ssh -C server.example.com

-D指定本机的 Socks 监听端口
该端口收到的请求,都将转发到远程的 SSH 主机,又称动态端口转发。

ssh -D 1080 server

上面命令将本机 1080 端口收到的请求,都转发到服务器server。

-f表示 SSH 连接在后台运行。

-F:指定配置文件。

ssh -F /usr/local/ssh/other_config

上面命令指定使用配置文件other_config。

-i参数用于指定私钥
默认值为~/.ssh/id_dsa。
注意,对应的公钥必须存放到服务器。

ssh -i my-key server.example.com

-l参数指定远程登录的账户名。

 ssh -l sally server.example.com

等同于

ssh sally@server.example.com

-L参数设置本地端口转发

ssh  -L 9999:targetServer:80 user@remoteserver

上面命令中,所有发向本地9999端口的请求,都会经过remoteserver发往 targetServer 的 80 端口,这就相当于直接连上了 targetServer 的 80 端口。

-m参数指定校验数据完整性的算法

 ssh -m hmac-sha1,hmac-md5 server.example.com

上面命令指定数据校验算法为hmac-sha1或hmac-md5。

-N参数用于端口转发
表示建立的 SSH 只用于端口转发,不能执行远程命令,这样可以提供安全性。

-o参数用来指定一个配置命令。

ssh -o "Keyword Value"

举例来说,配置文件里面有如下内容。

User sally
Port 220

通过-o参数,可以把上面两个配置命令从命令行传入。

ssh -o "User sally" -o "Port 220" server.example.com

使用等号时,配置命令可以不用写在引号里面,但是等号前后不能有空格。

ssh -o User=sally -o Port=220 server.example.com

-p参数指定 SSH 客户端连接的服务器端口。

ssh -p 2035 server.example.com

上面命令连接服务器的2035端口。

-q参数表示安静模式(quiet)
不向用户输出任何警告信息。

ssh –q foo.com
root’s password:

上面命令使用-q参数,只输出要求用户输入密码的提示。

-R参数指定远程端口转发

ssh -R 9999:targetServer:902 local

上面命令需在跳板服务器执行,指定本地计算机local监听自己的 9999 端口,所有发向这个端口的请求,都会转向 targetServer 的 902 端口。

-t参数在 ssh 直接运行远端命令时,提供一个互动式 Shell。

ssh -t server.example.com emacs

-v参数显示详细信息。

ssh -v server.example.com

-v可以重复多次,表示信息的详细程度,比如-vv和-vvv。

ssh -vvv server.example.com

或者

ssh -v -v -v server.example.com

上面命令会输出最详细的连接信息。

-V参数输出 ssh 客户端的版本。

ssh –V
ssh: SSH Secure Shell 3.2.3 (non-commercial version) on i686-pc-linux-gnu

上面命令输出本机 ssh 客户端版本是SSH Secure Shell 3.2.3。

-X参数表示打开 X 窗口转发。

ssh -X server.example.com

-1:参数指定使用 SSH 1 协议。

-2:参数指定使用 SSH 2 协议。

ssh -2 server.example.com

-4:指定使用 IPv4 协议,这是默认值。

ssh -4 server.example.com

-6:指定使用 IPv6 协议。

ssh -6 server.example.com

5.配置文件

文件位置:

SSH 客户端的全局配置文件是/etc/ssh/ssh_config,用户个人的配置文件在~/.ssh/config,优先级高于全局配置文件。

除了配置文件,~/.ssh目录还有一些用户个人的密钥文件和其他文件。下面是其中一些常见的文件。

  • ~/.ssh/id_ecdsa:用户的 ECDSA 私钥。
  • ~/.ssh/id_ecdsa.pub:用户的 ECDSA 公钥。
  • ~/.ssh/id_rsa:用于 SSH 协议版本2 的 RSA 私钥。
  • ~/.ssh/id_rsa.pub:用于SSH 协议版本2 的 RSA 公钥。
  • ~/.ssh/identity:用于 SSH 协议版本1 的 RSA 私钥。
  • ~/.ssh/identity.pub:用于 SSH 协议版本1 的 RSA 公钥。
  • ~/.ssh/known_hosts:包含 SSH 服务器的公钥指纹。

配置主机:

用户个人的配置文件~/.ssh/config,可以按照不同服务器,列出各自的连接参数,从而不必每一次登录都输入重复的参数。下面是一个例子。

Host *Port 2222Host remoteserverHostName remote.example.comUser neoPort 2112

上面代码中,Host *表示对所有主机生效,后面的Port 2222表示所有主机的默认连接端口都是2222,这样就不用在登录时特别指定端口了。这里的缩进并不是必需的,只是为了视觉上,易于识别针对不同主机的设置。

后面的Host remoteserver表示,下面的设置只对主机remoteserver生效。remoteserver只是一个别名,具体的主机由HostName命令指定,User和Port这两项分别表示用户名和端口。这里的Port会覆盖上面Host *部分的Port设置。

以后,登录remote.example.com时,只要执行ssh remoteserver命令,就会自动套用 config 文件里面指定的参数。 单个主机的配置格式如下。

ssh remoteserver

等同于

ssh -p 2112 neo@remote.example.com

Host命令的值可以使用通配符,比如Host *表示对所有主机都有效的设置,Host *.edu表示只对一级域名为.edu的主机有效的设置。它们的设置都可以被单个主机的设置覆盖。

6.可选的配置选项

  • AddressFamily inet:表示只使用 IPv4 协议。如果设为inet6,表示只使用 IPv6 协议。
  • BindAddress 192.168.10.235:指定本机的 IP 地址(如果本机有多个 IP 地址)。
  • CheckHostIP yes:检查 SSH 服务器的 IP 地址是否跟公钥数据库吻合。
  • Ciphers blowfish,3des:指定加密算法。
  • Compression yes:是否压缩传输信号。
  • ConnectionAttempts 10:客户端进行连接时,最大的尝试次数。
  • ConnectTimeout 60:客户端进行连接时,服务器在指定秒数内没有回复,则中断连接尝试。
  • DynamicForward 1080:指定动态转发端口。
  • GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file:指定全局的公钥数据库文件的位置。
  • Host server.example.com:指定连接的域名或 IP 地址,也可以是别名,支持通配符。Host命令后面的所有配置,都是针对该主机的,直到下一个Host命令为止。
  • HostKeyAlgorithms ssh-dss,ssh-rsa:指定密钥算法,优先级从高到低排
  • HostName myserver.example.com:在Host命令使用别名的情况下,HostName指定域名或 IP 地址。
  • IdentityFile keyfile:指定私钥文件。
  • LocalForward 2001 localhost:143:指定本地端口转发。
  • LogLevel QUIET:指定日志详细程度。如果设为QUIET,将不输出大部分的警告和提示。
  • MACs hmac-sha1,hmac-md5:指定数据校验算法。
  • NumberOfPasswordPrompts 2:密码登录时,用户输错密码的最大尝试次数。
  • PasswordAuthentication no:指定是否支持密码登录。不过,这里只是客户端禁止,真正的禁止需要在 SSH 服务器设置。
  • Port 2035:指定客户端连接的 SSH 服务器端口。
  • PreferredAuthentications publickey,hostbased,password:指定各种登录方法的优先级。
  • Protocol 2:支持的 SSH 协议版本,多个版本之间使用逗号分隔。
  • PubKeyAuthentication yes:是否支持密钥登录。这里只是客户端设置,还需要在SSH 服务器进行相应设置。
  • RemoteForward 2001 server:143:指定远程端口转发。
  • SendEnv COLOR:SSH 客户端向服务器发送的环境变量名,多个环境变量之间使用空格分隔。环境变量的值从客户端当前环境中拷贝。
  • ServerAliveCountMax 3:如果没有收到服务器的回应,客户端连续发送多少次keepalive信号,才断开连接。该项默认值为3。
  • ServerAliveInterval 300:客户端建立连接后,如果在给定秒数内,没有收到服务器发来的消息,客户端向服务器发送keepalive消息。如果不希望客户端发送,这一项设为0。
  • StrictHostKeyChecking yes:yes表示严格检查,服务器公钥为未知或发生变化,则拒绝连接。no表示如果服务器公钥未知,则加入客户端公钥数据库,如果公钥发生变化,不改变客户端公钥数据库,输出一条警告,依然允许连接继续进行。ask(默认值)表示询问用户是否继续进行。
  • TCPKeepAlive yes:客户端是否定期向服务器发送keepalive信息。
  • User userName:指定远程登录的账户名。
  • UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file:指定当前用户的known_hosts文件(服务器公钥指纹列表)的位置。
  • VerifyHostKeyDNS yes:是否通过检查 SSH 服务器的 DNS 记录,确认公钥指纹是否与known_hosts文件保存的一致。

四、服务器

1.前置知识

简介:

SSH 的架构是服务器/客户端模式,两端运行的软件是不一样的。OpenSSH 的客户端软件是 ssh,服务器软件是 sshd。

sshd

上面的命令运行后,如果提示“sshd re-exec requires execution with an absolute path”,就需要使用绝对路径来启动。这是为了防止有人出于各种目的,放置同名软件在$PATH变量指向的目录中,代替真正的 sshd。

可以使用以下命令查找位置

whereis sshd
sshd: /usr/sbin/sshd #结果

然后进行使用:

 /usr/sbin/sshd

使用方法:

启动

sudo service ssh start

重启

sudo service ssh restart

停止

sudo service ssh stop

下面的命令让 sshd 在计算机下次启动时自动运行。

sudo systemctl enable sshd.service

2.配置文件

sshd 的配置文件在/etc/ssh目录,主配置文件是sshd_config,此外还有一些安装时生成的密钥。

  • /etc/ssh/sshd_config:配置文件
  • /etc/ssh/ssh_host_ecdsa_key:ECDSA 私钥。
  • /etc/ssh/ssh_host_ecdsa_key.pub:ECDSA 公钥。
  • /etc/ssh/ssh_host_key:用于 SSH 1 协议版本的 RSA 私钥。
  • /etc/ssh/ssh_host_key.pub:用于 SSH 1 协议版本的 RSA 公钥。
  • /etc/ssh/ssh_host_rsa_key:用于 SSH 2 协议版本的 RSA 私钥。
  • /etc/ssh/ssh_host_rsa_key.pub:用于 SSH 2 协议版本的 RSA 公钥。
  • /etc/pam.d/sshd:PAM 配置文件。

注意,如果重装 sshd,上面这些密钥都会重新生成,导致客户端重新 ssh 连接服务器时,会跳出警告,拒绝连接。为了避免这种情况,可以在重装 sshd 时,先备份/etc/ssh目录,重装后再恢复这个目录。

配置文件sshd_config的格式是,每个命令占据一行。每行都是配置项和对应的值,配置项的大小写不敏感,与值之间使用空格分隔。

Port 2034

上面的配置命令指定,配置项Port的值是2034。Port写成port也可。

配置文件还有另一种格式,就是配置项与值之间有一个等号,等号前后的空格可选。

Port = 2034

配置文件里面,#开头的行表示注释。

# 这是一行注释

注意,注释只能放在一行的开头,不能放在一行的结尾。

Port 2034 # 此处不允许注释

上面的写法是错误的。

另外,空行等同于注释。

sshd 启动时会自动读取默认的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的-f参数指定。

sshd -f /usr/local/ssh/my_config

上面的命令指定 sshd 使用另一个配置文件my_config。

修改配置文件以后,可以用 sshd 命令的-t(test)检查有没有语法错误。

 sshd -t

配置文件修改以后,并不会自动生效,必须重新启动 sshd。

sudo service ssh restart

3.密钥

sshd 有自己的一对或多对密钥。它使用密钥向客户端证明自己的身份。所有密钥都是公钥和私钥成对出现,公钥的文件名一般是私钥文件名加上后缀.pub。

DSA 格式的密钥文件默认为/etc/ssh/ssh_host_dsa_key(公钥为ssh_host_dsa_key.pub),RSA 格式的密钥为/etc/ssh/ssh_host_rsa_key(公钥为ssh_host_rsa_key.pub)。如果需要支持 SSH 1 协议,则必须有密钥/etc/ssh/ssh_host_key。

如果密钥不是默认文件,那么可以通过配置文件sshd_config的HostKey配置项指定。默认密钥的HostKey设置如下。

# HostKey for protocol version 1
# HostKey /etc/ssh/ssh_host_key# HostKeys for protocol version 2
# HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_dsa_ke

上面命令前面的#表示这些行都是注释,因为这是默认值,有没有这几行都一样。

如果要修改密钥,就要去掉行首的#,指定其他密钥。

HostKey /usr/local/ssh/my_dsa_key
HostKey /usr/local/ssh/my_rsa_key
HostKey /usr/local/ssh/my_old_ssh1_key

4.可选命令

sshd 命令有一些配置项。这些配置项在调用时指定,可以覆盖配置文件的设置。

注意,如果出现

sshd re-exec requires execution with an absolute path

就要用绝对路径代替

/usr/sbin/sshd -d

如果出现

sshd: no hostkeys available -- exiting.

可能是权限不够,添加sudo

sudo /usr/sbin/sshd -d

如果依旧不行,可执行一下以下命令:

sudo ssh-keygen -A

-d参数用于显示 debug 信息。

sshd -d

-D参数指定 sshd 不作为后台守护进程运行。

sshd -D

-e参数将 sshd 写入系统日志 syslog 的内容导向标准错误(standard error)。

-f参数指定配置文件的位置。

-h参数用于指定密钥。

sshd -h /usr/local/ssh/my_rsa_key

-o参数指定配置文件的一个配置项和对应的值。

sshd -o "Port 2034"
配置项和对应值之间,可以使用等号。

 sshd -o "Port = 2034"

如果省略等号前后的空格,也可以不使用引号。

 sshd -o Port=2034

-o参数可以多个一起使用,用来指定多个配置关键字。

-p参数指定 sshd 的服务端口。

sshd -p 2034

上面命令指定 sshd 在2034端口启动。

-p参数可以指定多个端口。

$ sshd -p 2222 -p 3333

-t参数检查配置文件的语法是否正确。

5.可用配置项

以下是/etc/ssh/sshd_config文件里面的配置项。

AcceptEnv

AcceptEnv指定允许接受客户端通过SendEnv命令发来的哪些环境变量,即允许客户端设置服务器的环境变量清单,变量名之间使用空格分隔(AcceptEnv PATH TERM)。

AllowGroups

AllowGroups指定允许登录的用户组(AllowGroups groupName,多个组之间用空格分隔。如果不使用该项,则允许所有用户组登录。

AllowUsers

AllowUsers指定允许登录的用户,用户名之间使用空格分隔(AllowUsers user1 user2),也可以使用多行AllowUsers命令指定,用户名支持使用通配符。如果不使用该项,则允许所有用户登录。该项也可以使用用户名@域名的格式(比如AllowUsers jones@example.com)。

AllowTcpForwarding

AllowTcpForwarding指定是否允许端口转发,默认值为yes(AllowTcpForwarding yes),local表示只允许本地端口转发,remote表示只允许远程端口转发。

AuthorizedKeysFile

AuthorizedKeysFile指定储存用户公钥的目录,默认是用户主目录的ssh/authorized_keys目录(AuthorizedKeysFile .ssh/authorized_keys)。

Banner

Banner指定用户登录后,sshd 向其展示的信息文件(Banner /usr/local/etc/warning.txt),默认不展示任何内容。

ChallengeResponseAuthentication

ChallengeResponseAuthentication指定是否使用“键盘交互”身份验证方案,默认值为yes(ChallengeResponseAuthentication yes)。

从理论上讲,“键盘交互”身份验证方案可以向用户询问多重问题,但是实践中,通常仅询问用户密码。如果要完全禁用基于密码的身份验证,请将PasswordAuthentication和ChallengeResponseAuthentication都设置为no。

Ciphers

Ciphers指定 sshd 可以接受的加密算法(Ciphers 3des-cbc),多个算法之间使用逗号分隔。

ClientAliveCountMax

ClientAliveCountMax指定建立连接后,客户端失去响应时,服务器尝试连接的次数(ClientAliveCountMax 8)。

ClientAliveInterval

ClientAliveInterval指定允许客户端发呆的时间,单位为秒(ClientAliveInterval 180)。如果这段时间里面,客户端没有发送任何信号,SSH 连接将关闭。

Compression

Compression指定客户端与服务器之间的数据传输是否压缩。默认值为yes(Compression yes)

DenyGroups

DenyGroups指定不允许登录的用户组(DenyGroups groupName)。

DenyUsers

DenyUsers指定不允许登录的用户(DenyUsers user1),用户名之间使用空格分隔,也可以使用多行DenyUsers命令指定。

FascistLogging

SSH 1 版本专用,指定日志输出全部 Debug 信息(FascistLogging yes)。

HostKey

HostKey指定 sshd 服务器的密钥,详见前文。

KeyRegenerationInterval

KeyRegenerationInterval指定 SSH 1 版本的密钥重新生成时间间隔,单位为秒,默认是3600秒(KeyRegenerationInterval 3600)。

ListenAddress

ListenAddress指定 sshd 监听的本机 IP 地址,即 sshd 启用的 IP 地址,默认是 0.0.0.0(ListenAddress 0.0.0.0)表示在本机所有网络接口启用。可以改成只在某个网络接口启用(比如ListenAddress 192.168.10.23),也可以指定某个域名启用(比如ListenAddress server.example.com)。

如果要监听多个指定的 IP 地址,可以使用多行ListenAddress命令。

ListenAddress 172.16.1.1
ListenAddress 192.168.0.1
LoginGraceTime

LoginGraceTime指定允许客户端登录时发呆的最长时间,比如用户迟迟不输入密码,连接就会自动断开,单位为秒(LoginGraceTime 60)。如果设为0,就表示没有限制。

LogLevel

LogLevel指定日志的详细程度,可能的值依次为QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2、DEBUG3,默认为INFO(LogLevel INFO)。

MACs

MACs指定sshd 可以接受的数据校验算法(MACs hmac-sha1),多个算法之间使用逗号分隔。

MaxAuthTries

MaxAuthTries指定允许 SSH 登录的最大尝试次数(MaxAuthTries 3),如果密码输入错误达到指定次数,SSH 连接将关闭。

MaxStartups

MaxStartups指定允许同时并发的 SSH 连接数量(MaxStartups)。如果设为0,就表示没有限制。

这个属性也可以设为A:B:C的形式,比如MaxStartups 10:50:20,表示如果达到10个并发连接,后面的连接将有50%的概率被拒绝;如果达到20个并发连接,则后面的连接将100%被拒绝。

PasswordAuthentication

PasswordAuthentication指定是否允许密码登录,默认值为yes(PasswordAuthentication yes),建议改成no(禁止密码登录,只允许密钥登录)。

PermitEmptyPasswords

PermitEmptyPasswords指定是否允许空密码登录,即用户的密码是否可以为空,默认为yes(PermitEmptyPasswords yes),建议改成no(禁止无密码登录)。

PermitRootLogin

PermitRootLogin指定是否允许根用户登录,默认为yes(PermitRootLogin yes),建议改成no(禁止根用户登录)。

还有一种写法是写成prohibit-password,表示 root 用户不能用密码登录,但是可以用密钥登录。

PermitRootLogin prohibit-password

PermitUserEnvironment

PermitUserEnvironment指定是否允许 sshd 加载客户端的/.ssh/environment文件和/.ssh/authorized_keys文件里面的environment= options环境变量设置。默认值为no(PermitUserEnvironment no)。

Port

Port指定 sshd 监听的端口,即客户端连接的端口,默认是22(Port 22)。出于安全考虑,可以改掉这个端口(比如Port 8822)。

配置文件可以使用多个Port命令,同时监听多个端口。

Port 22
Port 80
Port 443
Port 8080

上面的示例表示同时监听4个端口。

PrintMotd

PrintMotd指定用户登录后,是否向其展示系统的 motd(Message of the day)的信息文件/etc/motd。该文件用于通知所有用户一些重要事项,比如系统维护时间、安全问题等等。默认值为yes(PrintMotd yes),由于 Shell 一般会展示这个信息文件,所以这里可以改为no。

PrintLastLog

PrintLastLog指定是否打印上一次用户登录时间,默认值为yes(PrintLastLog yes)。

Protocol

Protocol指定 sshd 使用的协议。Protocol 1表示使用 SSH 1 协议,建议改成Protocol 2(使用 SSH 2 协议)。Protocol 2,1表示同时支持两个版本的协议。

PubKeyAuthentication

PubKeyAuthentication指定是否允许公钥登录,默认值为yes(PubKeyAuthentication yes)。

QuietMode

SSH 1 版本专用,指定日志只输出致命的错误信息(QuietMode yes)。

RSAAuthentication

RSAAuthentication指定允许 RSA 认证,默认值为yes(RSAAuthentication yes)。

ServerKeyBits

ServerKeyBits指定 SSH 1 版本的密钥重新生成时的位数,默认是768(ServerKeyBits 768)。

StrictModes

StrictModes指定 sshd 是否检查用户的一些重要文件和目录的权限。默认为yes(StrictModes yes),即对于用户的 SSH 配置文件、密钥文件和所在目录,SSH 要求拥有者必须是根用户或用户本人,用户组和其他人的写权限必须关闭。

SyslogFacility

SyslogFacility指定 Syslog 如何处理 sshd 的日志,默认是 Auth(SyslogFacility AUTH)。

TCPKeepAlive

TCPKeepAlive指定打开 sshd 跟客户端 TCP 连接的 keepalive 参数(TCPKeepAlive yes)。

UseDNS

UseDNS指定用户 SSH 登录一个域名时,服务器是否使用 DNS,确认该域名对应的 IP 地址包含本机(UseDNS yes)。打开该选项意义不大,而且如果 DNS 更新不及时,还有可能误判,建议关闭。

UseLogin

UseLogin指定用户认证内部是否使用/usr/bin/login替代 SSH 工具,默认为no(UseLogin no)。

UserPrivilegeSeparation

UserPrivilegeSeparation指定用户认证通过以后,使用另一个子线程处理用户权限相关的操作,这样有利于提高安全性。默认值为yes(UsePrivilegeSeparation yes)。

VerboseMode

SSH 2 版本专用,指定日志输出详细的 Debug 信息(VerboseMode yes)。

X11Forwarding

X11Forwarding指定是否打开 X window 的转发,默认值为 no(X11Forwarding no)。

修改配置文件以后,可以使用下面的命令验证,配置文件是否有语法错误。

sshd -t

新的配置文件生效,必须重启 sshd。

sudo service ssh restart

结尾

如果文章内容有任何问题,请务必评论或私信我,我会即使更改,感谢

ssh安装与配置(详解版)相关推荐

  1. ssh安装及配置详解

    ssh(secure shell) --加密远程登录管理服务器,加密的数据传输 一.SSH为SecureShell的缩写,由IETF的网络工作小组(NetworkWorkingGroup)所制定:SS ...

  2. Julia的安装与配置详解(包含在Ubuntu 18.04和Windows 10系统上Julia的安装)

    Julia的安装与配置详解((包含在Ubuntu 18.04和Windows 10系统上Julia的安装) Julia的安装 使用二进制文件安装Julia 在Ubuntu上安装Julia 在Windo ...

  3. Gradle安装和配置详解

    Gradle安装和配置详解 gradle是基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,也提供了很多第三方插件.在Java Web项目中通常会用到 java.war. ...

  4. Nagios远程监控软件的安装与配置详解

    Nagios远程监控软件的安装与配置详解 作者:redhat_hu Nagios是一款功能强大的网络监视工具,它可以有效的监控windows.linux.unix主机状态以及路由器交换机的网络设置,打 ...

  5. gulp的安装和配置详解

    gulp的安装和配置详解 1.安装node.js 先下载一个node.js安装包. 下载完成后双击即可. 打开cmd,命令行输入node -v,回车输出nodejs版本号,表示安装成功. 命令行输入n ...

  6. node.js卸载、安装、配置详解

    node.js卸载.安装.配置详解 一. node.js卸载 二.下载安装 2.1 下载 2.2 安装 2.2.1 选择msi安装 2.2.2 选择zip安装 三.配置 3.1 环境变量配置 3.2 ...

  7. keepalived介绍、安装及配置详解

    文章目录 keepalived简介 keeplived和LVS关系 VRRP工作原理 keepalived体系结构及工作原理 keepalived安装 keepalived配置详解 keepalive ...

  8. Linux中Nginx安装与配置详解及常见问题

    3 Nginx安装 3.1 安装前的准备     1)准备 pcre-8.12.tar.gz.该文件为正则表达式库.让nginx支持rewrite需要安装这个库.     2) 准备 nginx-1. ...

  9. Tomcat安装及配置详解

    转载:http://www.ttlsa.com/tomcat/tomcat-install-and-configure/ 一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用 ...

  10. 01 Redis安装、配置详解、数据备份与恢复

    缓存简介 简介 缓存是为了调节速度不一致的两个或者多个不同的物质的速度,在中间对速度访问较快的一方起到一个加速访问速度较慢的一方的作用,比如cpu的一级,二级缓存是为了保存cpu最近经常访问的数据,内 ...

最新文章

  1. php线程视频教程,通俗易懂的php多线程解决方案
  2. iOS 自带 MD5转化
  3. 聊聊WebRTC网关服务器2:如何选择PeerConnection方案?
  4. minitab怎么算西格玛水平_西格玛和西格玛水平
  5. 代码审计之DocCms漏洞分析
  6. Hive谓词解析过程分析
  7. openjudge 放苹果 1664
  8. 四元素、欧拉角及旋转矩阵之间的转换
  9. python第三方库引用_Python入门:如何使用第三方库
  10. 平面设计师友好的免抠PNG图片素材
  11. java折叠自行车x1-auto,java入门第三季 7-1 简易扑克练习
  12. python怎么用matplotlib_python-无法在我的程序中使用matplotlib函数
  13. 《土豆荣耀》重构笔记(八)添加角色的动画
  14. TJA1101汽车网卡调试
  15. java实现sug,Elasticsearch搜索Suggest功能优化
  16. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
  17. SQL链接EXCEL文件
  18. KubeEdge SIG AI发布首个分布式协同AI Benchmark调研
  19. 汽车芯片TJA1057GTK/3高速 CAN 收发器3 毫米 x 3 毫米 x 0.85 毫米
  20. 一些生活中常用的英语单词

热门文章

  1. magisk小问题解答
  2. NB-IOT技术与发展问答
  3. Leetcode题解(更新中……)
  4. 基于PLC远程监控,PLC远程运维,PLC远程调试的系统软件开发方案
  5. 使用python对微信好友进行数据分析
  6. oracle基本操作语句大全
  7. linux netperf,linux netperf的安装
  8. Modbus转Profinet网关连接英威腾变频器方法
  9. 用台达PLC485通信控制11台英威腾变频启动停止速度设定
  10. ip地址自动获取背后的机制(udhcpc)