SSH是Secure Shell Protocol的简写。在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
SSH是专为远程登陆会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的防止远程管理过程中的信息泄漏问题。
在默认状态下,SSH服务主要提供两个服务功能;一个是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务:另一个类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务 提醒SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令scp,也是通过ssh协议工作的
小结:
1)SSH是安全的加密协议,用于远程连接Linux服务器。
2)SSH默认的端口是22,安全协议版本是SSH2,除了2还有ssh1有漏洞
3)SSH服务器端主要包含两个服务器功能SSH远程连接,SFTP服务。
4)Linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令等。
修改SSH服务的运行参数,是通过修改配置文件/etc /ssh/sshd_config实现的。
Port 52114 (ssh默认连接端口是22 修改他)
PermitRootLogin no(禁止远程root登陆)
PermitEmptyPasswords no(禁止空密码的登陆)
UseDNS no(不适用DNS)
ListenAddress 17216161:22 (只监听内网IP 可以加端口号)
在远程管理linux系统基本上都要使用到ssh,原因很简单:telnet、FTP等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。
1、编辑 /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 ~
下面对上述选项参数逐进行解释:
Site-wide defaults for various options
带“#”表示该句为注释不起作,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有很多选项前面加有“#”注释,虽然表示不起作用,其实是说明此为系统默认的初始化设置。
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,由于rsh并不安全,所以此选项应当设置为"no"。
UseRsh no
"UseRsh"设置是否在这台计算机上使用"rlogin/rsh",原因同上,设为"no"。
BatchMode no
"BatchMode":批处理模式,一般设为"no";如果设为"yes",交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes
"CheckHostIP"设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为"yes"。
StrictHostKeyChecking no
"StrictHostKeyChecking"如果设为"yes",ssh将不会自动把计算机的密匙加入"$HOME/ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。
IdentityFile ~/ssh/identity
"IdentityFile"设置读取用户的RSA安全验证标识。
Port 22
"Port"设置连接到远程主机的端口,ssh默认端口为22。
Cipher blowfish
“Cipher”设置加密用的密钥,blowfish可以自己随意设置。
EscapeChar ~
“EscapeChar”设置escape字符。
2、编辑 /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登录。这个选项从安全角度来讲应设成"no"。
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”的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或IP地址。
通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。
1)执行命令生成私钥和公钥 ssh-keygen -t dsa 如图:
3)我们切换过去就不需要密码了 如图
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:
第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。
第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。
SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。
如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。
首先确认ssh-server是否已经启动了
如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:
停止和重启ssh服务的命令如下:
接下来就可以进行使用客户机远程登录服务器了~
口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址 eg:
如果需要 调用图形界面程序 可以使用 -X 选项
如果客户机的用户名和服务器的 用户名相同 ,登录时 可以省略 用户名。
还要说明的是,SSH服务的 默认端口是22 ,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:
客户机必须要知道服务器的 ip地址 。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:
如果是第一次登录远程主机,系统会给出下面提示:
意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:s8pZiuKQr7k7f+57j22lk/IdWC8143VQKR+EabeP5,确定想要继续连接吗?
输入yes 即可。这时系统会提示远程主机被添加到已知主机列表。
然后会要求我们输入 远程主机的密码 ,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。
我们可以通过 Ctrl+D 或者 exit 命令 退出远程登录 。
每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。
1、在本机生成密钥对
使用ssh-keygen命令生成密钥对:
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsapub。
2、将公钥复制到远程主机中
使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ ssh/authorized_key 文件中
ssh-copy-id ldz@19216801
经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。
1)已获取登录实例的管理员帐号及密码(或密钥)。
2)云服务器实例已开通22号端口。
—使用密码登录
Host Name(or IP address) :服务器的IP地址;
Port :服务器的端口,必须设置为22;
Connect type :选择 “SSH”;
Saved Sessions :填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;
登录完成后,命令提示符左侧将显示当前登录云服务器的信息。
—使用密钥登录
Ps: 当不存在私钥文件时,可以选择Conversions > Import key 导入公钥(pem)文件来生成私钥文件(ppk)
Host Name (IP address) :服务器的IP;
Port :服务器的端口,必须填 22;
Connect type :选择 “SSH”;
Saved Sessions :填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;
登录完成后,命令提示符左侧将显示当前登录服务器的信息。
在实际运用中在当前服务器执行命令后,需要在另一台服务器继续执行某些命令,分开去到另一台服务器执行也是比较麻烦的,因此整理下集中执行的方式1、首先配置ssh免密 *** 作
Linux 下实现SSH互信: >ssh 为 secure shell 的英文缩写,是一种加密的网络传输协议。常用于登录远程服务器与在远程服务器上执行命令。
SSH 使用客户端-服务器模型,标准端口为 22。服务器端需要开启 SSH 守护进程接受远端的连接,而用户需要使用 SSH 客户端与服务端连接。
最常见的开源实现是 OpenSSH
登录:
在远程机器上执行 command,把 stdout,stderr 送回来然后断开连接:
常用参数:
scp 是一个命令行工具,是英文 secure copy 的缩写,用于在服务器和客户端之间传输文件, *** 作类似cp。
使用注意点:远程主机名后要加个冒号再跟路径。如:
SSH 以非对称加密实现身份验证。身份验证有多种途径,可以使用密码来认证,也可以通过实现配置好的密钥文件来认证。
通过密钥认证登录的条件:
我们通常使用 ssh-keygen 这个工具来生成公钥和私钥,如下:
这会生成两个文件 ~/ssh/id_rsa 和 ~/ssh/id_rsapub ,前者是私钥,我们应该小心保护,后者是公钥,应当将其放到服务端的 ~/ssh/authorized_keys 中去,我们可以使用 ssh-copy-id 这个工具来完成:
或者手动将其复制粘贴过去。
也可以使用如下命令:
跳板机,又常叫做“Bastion host”。
在企业中,业务服务器通常有 ip 限制,不允许直接从办公机登录,而是需要先登录一个跳板机,通过跳板机来登录业务服务器。
这样做的目的是:隔离内部网络,只允许从跳板机访问,那么我们只需要特别关注跳板机的安全配置就可以了,便于更好的进行安全控制。
我们可以配置 ssh 客户端,让 ssh 替我们处理跳板机的登录,避免多次输入命令的负担。
假设我们有跳板机 jumpserver 和 目标服务器 targetserver。
方法一、使用命令行的 -J 参数
方法二、配置文件: ~/ssh/config
然后就可以直接:
sshd 的配置文件: /etc/ssh/sshd_config 。
我们可以修改 sshd 的默认配置来增强系统的安全性,以下是一些需要注意的配置项:在Windows环境下常使用putty登陆到远程Linux主机,其间使用了ppk文件。Mac OSX下没有putty,但可以直接使用ssh命令,这个命令需要在terminal下来执行。在使用ssh前,需要把ppk文件的格式转换一下,方法是:仍然在Windows,打开puttygenexe,读入ppk文件,然后点击Conversions菜单,选择Openssh,假定文件存为myppkssh。此时,把此文件传输到Mac OSX后就可以在Mac OSX下执行ssh来远程登陆了。我使用的命令格式为:
ssh -2 user@ip -i myppkssh
以上,user和ip需根据你的实际情况进行替换。myppkssh文件名也可以自己指定。另外,需要设置myppkssh的访问许可:chmod 700 myppkssh。MAC 是自带SSH的,可以使用whereis查看是否存在,在终端执行下面的命令:
执行完后会打印存在路径
之后查看现有进程,执行下列命令:
执行完后会打印现有进程,但是你会发现找不到ssh对应的进程
下列为我的终端执行命令后的结果
这时候如果直接使用SSH命令连接本地主机或者远程主机会遇到下列错误:
解决方法:打开系统偏好设置,在共享中,打开远程登录,如下图:
之后使用ssh localhost来测试一下,如果提示输入密码来认证就没问题了。
之后再grep一下进程就可以看到ssh进程在运行了:
可以通过ssh命令连接其他主机,例如:
ssh username@192168100100
也可以通过ssh命令连接其他服务器,例如:ssh -p 端口 用户名@服务器ip地址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)