如何在Linux服务器上配置SSH密钥验证
客户端设置
客户需要生成密钥对(公共和私有)。 稍后我们会将公钥上传到SSH服务器。
ssh-keygen
生成SSH密钥时,系统将提示您输入密码。 我们建议在此步骤中使用新密码。 这将避免别人使用你的钥匙。
将公钥上传到服务器
现在我们将使用ssh-copy-id命令来上传密钥。 您可以手动将公钥(~/ssh/id_rsapub)附加到服务器上的 ~/ssh/authorized_keys。
ssh-copy-id user@hostname
更安全的SSH设置
此步骤是可选的,但建议禁用密码验证(特别是root用户)打开文件 /etc/ssh/sshd_config 并将PasswordAuthentication更改为“no”值。
PasswordAuthentication no
确保在重新启动SSH服务器之前测试您的ssh密钥验证!
sudo service ssh restart
以管理员身份运行powershell,运行以下指令:
已安装的服务输出 "Installed",未安装输出"NotPresent",如下:
根据需要安装的组件运行以下命令:
如安装成功,控制台将输出以下内容:
管理员身份运行powershell,然后运行以下命令启动sshd service:
客户机登录测试(此部分运行在客户机),此部分过于简单,不做详细演示
此时客户机目录 ~/ssh下将生成id_rsa和id_rsapub,将id_rsapub改名为administrators_authorized_keys,粘贴至服务器的C:\ProgramData\ssh目录
内容如下
管理员身份运行powershell,提升文件administrators_authorized_keys权限
客户机以rsa连接服务器
SSH详解-1ssh基础知识
SSH详解-2ssh基本用法
SSH详解-3密钥登陆
SSH详解-4多个ssh公钥
OpenSSH 的客户端是二进制程序 ssh,Linux 系统一般都自带 ssh。新版的win10开启ssh服务,但不是很好用,可以使用一些好用的软件 Xshell 、 Putty 等
安装OpenSSH 以后,可以使用 -V 参数输出版本号,查看一下是否安装成功。
ubuntu
windows
ssh最常用的用途就是登录服务器,当然这需要服务器再运行着sshd。
ssh 登录服务器的命令如下,例如连接局域网内一台ip地址为192168198的主机
上面命令中,root是用户名,@后面的是主机名,它可以是域名,也可以是 IP 地址或局域网内部的主机名。
用户名也可以使用ssh的 -l 参数指定,这样的话,用户名和主机名就不用写在一起了。
ssh 默认连接服务器的22端口, -p 参数可以指定其他端口。
上面命令连接服务器192168198的8888端口,这里没有指定用户名。将使用客户端的当前用户名,作为远程服务器的登录用户名。
刚刚应该注意到这段话了,这段话是什么意思呢?
上面这段话的意思是192168198这个服务器的指纹是陌生的,是否要继续连接(输入 yes or no )。
接下来,输入 yes 后ssh会将当前服务器的指纹存储在本机 ~/ssh/known_hosts 文件中。以后再连接的时候,就不会再出现警告了。
也就是说,ssh通过判断当前服务器公钥的指纹是否存在于~/ssh/known_hosts文件中,来判断是否为陌生主机
然后,客户端就会跟服务器建立连接。
接着,ssh 要求用户输入所要登录账户的密码,用户输入密码验证成功后就可以使用远程shell了。
ssh(1) - OpenBSD manual pages
首先进入/etc目录下,/etc目录存放的是一些配置文件,比如passwd等配置文件,要想使用ssh远程登陆,需要配置/etc/ssh/sshd_config文件里的配置信息,使用vim编辑,在命令行模式下输入 vim /etc/ssh/sshd_config,进入之后,按“i”进入编辑状态,在其文件里找到并修改为:PasswordAuthentication yes , PermitRootLogin yes两行即可,
修改之后,按“esc”退出,并按“:wq”保存并退出,或直接按“:x”直接保存退出,(注意:此处的x为小写x,大写X是将文件内容加密,使用时细心注意),
退出编辑模式之后,回到命令模式,输入 sevice ssh start/stop/restart/status,启动/停止/重启/状态,选择start启动ssh服务。
如果上面开启SSH服务的命令不能用,可以使用命令:sudo service sshd start 试试,检查是否开启SSH服务使用命令:ps -e | grep sshd
此时可以查看ssh状态是否为运行状态,运行状态即可使用ssh远程登陆。
使用“ifconfig”命令查询ip地址
使用ssh登陆时,输入主机(linux的ip地址),账号,密码登陆!
如果需要远程连接SSH,需要把22端口在防火墙上开放,关闭防火墙,或者设置22端口例外 /etc/initd/iptables stop
怎么通过ssh登陆可参看下一篇“通过ssh实现远程登陆服务器!”
大致步骤为:
SSH 服务配置文件位置
/etc/ssh/sshd_config
# 修改配置
PasswordAuthentication yes
PermitRootLogin yes
# 启动SSH 服务
sevice ssh start/stop/status
安装SSH:yum install ssh
启动SSH: service sshd start
设置开机运行: chkconfig sshd on
实现此的技术原理:
在内网通过域名绑定服务器,外网SSH访问连接时,通过域名的访问,实现访问内网LINUX。
具体的实现过程如下:
明确LINUX服务器内网访问地址端口,确保LINUX服务器正常开启SSH服务,在内网SSH可以正常访问连接。如图所示:
被访问端的Linux主机上使用nat123动态域名解析Linux版本。
在被访问端的Linux服务器安装nat123客户端,并登录使用它。
登录网页,左侧用户中心,添加域名解析,选择动态域名解析并添加确认。
选择动态域名解析记录,使用二级域名,或自己的域名。鼠标放在输入框有向导提示。如不理解负载均衡,不要勾选多点登录。
新添加动态解析后,等待几分钟生效。解析生效后,动态解析域名与本地公网IP是保持对应的。可以通过ping下域名核实,返回结果IP地址为本地公网IP地址时,表示动态解析生效正常。
路由器端口映射,路由映射SSH访问22端口。
因为公网IP是在路由器上的,外网访问时,需要经过路由,需要在路由器上做端口映射,将内网LINUX服务器访问22端口打通。路由器端口映射位置:转发规则/虚拟服务器/添加允许外网访问端口和协议。我的LINUX服务器SSH服务端口是默认的22,我内网对应LINUX服务器主机的内网IP地址是192168129。
外网访问时,使用动态解析域名。
在外网使用SSH访问内网LINUX服务器时,使用动态解析域名进行连接访问。域名是不变的,可以上网即可访问,再也不担心动态公网IP变化的问题。
SSH-Server配置指南
一、SSH简介
SSH (Secure Shell)是一个应用程序中提供安全通信的协议,通过SSH协议可以安全地访问服务器,因为SSH 具有成熟的公钥加密体系,在数据进行传输时进行加密,保证数据在传输时不被恶意篡改、破坏和泄露,能有效防止网络嗅探和IP欺骗等攻击。
二、服务器端Ubuntu平台下OpenSSH server的安装
SSH是由芬兰的一家公司开发的,但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的。
下以命令均是以管理员身份登录使用
1. 在Ubuntu终端使用apt命令
复制代码
代码如下:
# apt-get install openssh-server
如果下载失败,可能是由于系统需要更新的缘故,尝试更新一下,就可以了。使用一下命令:
复制代码
代码如下:
# apt-get update
2 配置openssh server,可以按照需求修改配置文件
复制代码
代码如下:
# vi etc/ssh/ssh_config
3. 重启服务器
复制代码
代码如下:
# /etc/initd/ssh restart
以上OpenSSH server就算安装完成。
配置“/etc/ssh/ssh_config”文件
“/etc/ssh/ssh_config” 文件是OpenSSH系统范围的配置文件,允许你通过设置不同的选项来改变客户端程序的运行方式。这个文件的每一行
包含“关键词-值”的匹配,其中“关键词”是忽略大小写的。下面列出来的是最重要的关键词,用man命令查看帮助页(ssh (1))可以得到
详细的列表。
编辑“ssh_config”文件(vi /etc/ssh/ssh_config),添加或改变下面的参数:
复制代码
代码如下:
# Site-wide defaults for various options
Host
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking no
IdentityFile ~/ssh/identity
Port 22
Cipher blowfish
EscapeChar ~
下面逐行说明上面的选项设置:
Host
选项“Host”只对能够匹配后面字串的计算机有效。“”表示所有的计算机。
ForwardAgent no
“ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no
“ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否使用口令验证。
FallBackToRsh no
“FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh。
UseRsh no
“UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本
文件和批处理任务十分有用。
CheckHostIP yes
“CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/ssh/known_hosts”文件,并且一旦计算机的密
匙发生了变化,就拒绝连接。
IdentityFile ~/ssh/identity
“IdentityFile”设置从哪个文件读取用户的RSA安全验证标识。
Port 22
“Port”设置连接到远程主机的端口。
Cipher blowfish
“Cipher”设置加密用的密码。
EscapeChar ~
“EscapeChar”设置escape字符。
配置“/etc/ssh/sshd_config”文件
“/etc/ssh/sshd_config”是OpenSSH的配置文件,允许设置选项改变这个daemon的运行。这个文件的每一行包含“关键词-值”的匹配,其中
“关键词”是忽略大小写的。下面列出来的是最重要的关键词,用man命令查看帮助页(sshd (8))可以得到详细的列表。
编辑“sshd_config”文件(vi /etc/ssh/sshd_config),加入或改变下面的参数:
复制代码
代码如下:
# This is ssh server systemwide configuration file
Port 22
ListenAddress 19216811
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
下面逐行说明上面的选项设置:
Port 22
“Port”设置sshd监听的端口号。
ListenAddress 19216811
“ListenAddress”设置sshd服务器绑定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。
LoginGraceTime 600
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被
截获的信息。
PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/ssh/known_hosts”
StrictModes yes
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的
目录和文件设成任何人都有写权限。
X11Forwarding no
“X11Forwarding”设置是否允许X11转发。
PrintMotd yes
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。
LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hostsequiv”进行安全验证是否已经足够了。
RhostsRSAAuthentication no
“RhostsRSA”设置是否允许用rhosts或“/etc/hostsequiv”加上RSA进行安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否允许只有RSA安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否允许口令验证。
PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。
AllowUsers admin
“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是
DNS名或IP地址。
使用SFTP代替FTP传输文件
FTP(文件传输协议)是一种使用非常广泛的在网络中传输文件的方式,但是,它也同样存在被网络窃听的危险,因为它也是以明文传送用户认证信息。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure FTP)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。若要开启 SFTP功能可以修改sshd2_config文件的下列内容:
复制代码
代码如下:
# subsystem-sftp sftp-server
去掉行首的“#”,然后重新启动SSH服务器,这样在进行SSH连接时就可以同时使用SFTP传输文件。
关于客户端设置
以上是对服务器的设置,其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下
面就对Windows上的客户端系统设置加以说明。
首先从上文给出的网址下载“SSHSecureShellClient-323exe”文件并安装。安装完成后,在桌面上会产成两个快捷方式,一个是“SSH
Secure Shell Client”,用于远程管理,另一个是“SSH Secure File Transfer Client”,用于和服务器进行文件传输。在工具栏中点击
“quick connnect”,输入正确的主机名和用户名,然后在弹出的对话框中输入密码完成登录,即可开始执行命令或者传输文件。在使用SFTP
时,默认只能显示用户的宿主目录的内容和非隐藏文件。但是,有时候您可能还要查看其它目录或者隐藏文件,这时只需要在菜单“eidt-
setting- file transfer”的选项中选中“show root directory”和“show hidden file”两个选项即可。
使普通用户仅使用SFTP而没有使用Shell的权限
默认情况下管理员给系统添加的账号将同时具有SFTP和SSH的权限。让普通用户使用shell执行命令也是有很大的安全隐患的,如果能够禁止用
户使用shell执行命令而仅使用SFTP传输文件,就能消除这种安全隐患,完全实现FTP的功能,
正如上文所述,SFTP没有单独的守护进程,只能借助于sshd守护进程,所以我们仍然需要使用SSH服务器,要保证sshd守护进程处于运行状态。
具体实现方法如下:
首先,在编译安装时,编译中一定要有“–enable-static” 选项。安装成功后,在安装目录下的bin目录中执行下面的命令:
复制代码
代码如下:
[root@localhost bin]# ls -l ssh-dummy-shell sftp-server2
将看到下列输出内容:
复制代码
代码如下:
-rwxr-xr-x 1 root root 1350417 Apr 28 16:30 sftp-server2
-rwxr-xr-x 1 root root 3566890 Apr 28 16:30 sftp-server2static
-rwxr-xr-x 1 root root 72388 Apr 28 16:30 ssh-dummy-shell
-rwxr-xr-x 1 root root 1813412 Apr 28 16:30 ssh-dummy-shellstatic
其中带“static”后缀名,且比较大的两个文件就是加上“–enable-static”选项后生成的,后面我们将用到这里两个文件。
下面以添加普通账号test为例讲述具体操作步骤。
1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令:
复制代码
代码如下:
[root@localhost bin]# cd /usr/local/ssh32/bin
[root@localhost bin]#cp ssh-dummy-shellstatic /home/bin/ssh-dummy-shell
[root@localhost bin]# cp sftp-server2static /home/bin/sftp-server
[root@localhost bin]#chown -R rootroot /home/bin
[root@localhost bin]#chmod -R 755 /home/bin
2.添加一个组,使以后所有禁止使用shell的用户都属于这个组,这样便于管理更多的用户:
[root@localhost bin]#groupadd template
3.在添加系统账号时使用如下命令:
复制代码
代码如下:
[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test
[root@localhost root]#passwd test
[root@localhost root]#mkdir /home/test/bin
[root@localhost root]#cd /home/test/bin
[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell
[root@localhost bin]#ln /home/bin/sftp-server sftp-server
[root@localhost bin]#chown -R rootroot /home/test/bin
[root@localhost bin]#chmod -R 755 /home/test/bin
3.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容:
#ChRootGroups sftp,guest
改为:
ChRootGroups sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样可以使包含在template组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容:
复制代码
代码如下:
#ChRootUsers anonymous,ftp,guest
事实证明SSH是一种非常好的网络安全解决方案,但是,目前仍有很多管理员使用Telnet或FTP这种非常不安全的工具,希望尽快转移到SSH上来,以减少网络安全隐患。
默认配置
Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:
ssh IP地址1
一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:
ssh 用户名@IP地址 -p 端口号1
如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。
密钥登录
每次登录SH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。
首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。
ssh-keygen1
然后将本地公钥添加到服务器中,需要使用另一个命令:
scp -P 端口号 本地文件路径 用户名@远程服务器地址:远程路径1
然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。
0条评论