SSH 为 Secure Shell 的缩写,简单地说,SSH 为创建在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登陆会话和其余网络服务提供安全性的协议。利用 SSH 协议能够有效防止远程管理过程当中的信息泄露问题。linux
Openssh 为这种协议的实现或实体,咱们能够经过 openssh 这个开源的软件进行远程登陆。算法
因为我笔记本上装的为debian系统,而台式机为windows系统而且双屏,再把个人笔记本记到桌子上真的没有多少地方了,而且操做笔记本时还要扭着身子,太麻烦了。因此呢,打算远程登陆个人笔记本。用的我台式电脑里有虚拟机并里面的utunbu或kali系统登陆它(真心不想装windows式下的ssh的client).windows
OpenSSh 分为客户端openssh-client 与服务端 openssh-server.通常状况下,咱们的linux系统都会自带 client端的。缓存
最简单的方法下载:安全
apt-get install openssh-client apt-get install openssh-server
安装完成之后,能够经过如下命令看到它们运行的进程:服务器
ps -e |grep ssh #输出: 1943 ? 00:00:00 ssh-agent #表示客户端已运行; 16322 ? 00:00:00 sshd #表示服务端已运行;
ssh的配置文件为:/etc/ssh/sshd_config. 在网上找到了一个中文的注释文件(来自:http://xujpxm.blog.51cto.com/8614409/1717862),太方便了:cookie
Port 22 #设置ssh监听的端口号,默认22端口 ListenAddress :: ListenAddress 0.0.0.0 #指定监听的地址,默认监听全部; Protocol 2,1 #指定支持的SSH协议的版本号。'1'和'2'表示仅仅支持SSH-1和SSH-2协议。 #"2,1"表示同时支持SSH-1和SSH-2协议。# HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key #HostKey是主机私钥文件的存放位置; #SSH-1默认是 /etc/ssh/ssh_host_key 。SSH-2默认是 /etc/ssh/ssh_host_rsa_key和 #/etc/ssh/ssh_host_dsa_key 。一台主机能够拥有多个不一样的私钥。"rsa1"仅用于SSH-1, #"dsa"和"rsa"仅用于SSH-2。 UsePrivilegeSeparation yes #是否经过建立非特权子进程处理接入请求的方法来进行权 #限分 离。默认值是"yes"。 认证成功后,将以该认证用户的身份创另外一个子进程。这样作的目的是 #为了防止经过有缺陷的子进程提高权限,从而使系统更加安全。 KeyRegenerationInterval 3600 #在SSH-1协议下,短命的服务器密钥将以此指令设置的时 #间为周期(秒),不断从新生成;这个机制能够尽可能减少密钥丢失或者黑客攻击形成的损失。设为 0 #表示永不从新生成为 3600(秒)。 ServerKeyBits 1024 #指定服务器密钥的位数 SyslogFacility AUTH #指定 将日志消息经过哪一个日志子系统(facility)发送。有效值是: #DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3,LOCAL4, LOCAL5, #LOCAL6, LOCAL7 LogLevel INFO #指定日志等级(详细程度)。可用值以下:QUIET, FATAL, ERROR, INFO #(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3,DEBUG 与 DEBUG1 等价;DEBUG2 # 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。比 DEBUG 更详细的日志可能会泄漏用户 # 的敏感信息,所以反对使用。 LoginGraceTime 120 #限制用户必须在指定的时限(单位秒)内认证成功,0 表示无限制。默认 #值是 120 秒;若是用户不能成功登陆,在用户切断链接以前服务器须要等待120秒。 PermitRootLogin yes #是否容许 root 登陆。可用值以下:"yes"(默认) 表示容许。 #"no"表示禁止。"without-password"表示禁止使用密码认证登陆。"forced-commands-only" #表示只有在指定了 command 选项的状况下才容许使用公钥认证登陆,同时其它认证方法所有被禁止。 #这个值经常使用于作远程备份之类的事情。 StrictModes yes #指定是否要求 sshd(8) 在接受链接请求前对用户主目录和相关的配 #置文件 进行宿主和权限检查。强烈建议使用默认值"yes"来预防可能出现的低级错误。 RSAAuthentication yes #是否容许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。 PubkeyAuthentication yes #是否容许公钥认证。仅能够用于SSH-2。默认值为"yes"。 IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 来作为认证。推荐设为yes。 RhostsRSAAuthentication no #这个选项是专门给 version 1 用的,使用 rhosts 档案在 #/etc/hosts.equiv配合 RSA 演算方式来进行认证!推荐no。 HostbasedAuthentication no #这个与上面的项目相似,不过是给 version 2 使用的 IgnoreUserKnownHosts no #是否在 RhostsRSAAuthentication 或 #HostbasedAuthentication 过程当中忽略用户的 ~/.ssh/known_hosts 文件。默认值是"no"。 #为了提升安全性,能够设为"yes"。 PermitEmptyPasswords no #是否容许密码为空的用户远程登陆。默认为"no"。 ChallengeResponseAuthentication no #是否容许质疑-应答(challenge-response)认 #证。默认值是"yes",全部 login.conf中容许的认证方式都被支持。 PasswordAuthentication yes # 是否容许使用基于密码的认证。默认为"yes"。 KerberosAuthentication no #是否要求用户为 PasswordAuthentication 提供的密码 #必须通 过 Kerberos KDC 认证,也就是是否使用Kerberos认证。使用Kerberos认证,服务器 #须要一个能够校验 KDC identity 的 Kerberos servtab 。默认值是"no"。 KerberosGetAFSToken no #若是使用了 AFS 而且该用户有一个 Kerberos 5 TGT, #那么开 启该指令后,将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。 KerberosOrLocalPasswd yes #若是 Kerberos 密码认证失败,那么该密码还将要经过其它 #的 认证机制(好比 /etc/passwd)。默认值为"yes"。 KerberosTicketCleanup yes #是否在用户退出登陆后自动销毁用户的 ticket 。默认 #"yes"。 GSSAPIAuthentication no #是否容许使用基于 GSSAPI 的用户认证。默认值为"no"。 #仅用 于SSH-2。 GSSAPICleanupCredentials yes #是否在用户退出登陆后自动销毁用户凭证缓存。默认值 #是"yes"。仅用于SSH-2。 X11Forwarding no #是否容许进行 X11 转发。默认值是"no",设为"yes"表示容许。若是 #容许X11转发而且sshd代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。 #那么将可能有额外的信息被泄漏。因为使用X11转发的可能带来的风险,此指令默认值为"no"。需 #要注意的是,禁止X11转发并不能禁止用户转发X11通讯,由于用户能够安装他们本身的转发器。如 #果启用了 UseLogin ,那么X11转发将被自动禁止。 X11DisplayOffset 10 #指定X11 转发的第一个可用的显示区(display)数字。默认值 #是 10 。这个能够用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。 PrintMotd no #登入后是否显示出一些信息呢?例如上次登入的时间、地点等 #等,预设是 yes ,可是,若是为了安全,能够考虑改成 no ! PrintLastLog yes #指定是否显示最后一位用户的登陆时间。默认值是"yes" TCPKeepAlive yes #指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes" #。这种消息能够检测到死链接、链接不当关闭、客户端崩溃等异常。能够设为"no"关闭这个特性。 UseLogin no #是否在交互式会话的登陆过程当中使用 login。默认值是"no"。 #若是开启此指令,那么 X11Forwarding 将会被禁止,由于 login 不知道如何处理 xauth #cookies 。须要注意的是,login是禁止用于远程执行命令的。若是指定了 #UsePrivilegeSeparation ,那么它将在认证完成后被禁用。 MaxStartups 10 #最大容许保持多少个未认证的链接。默认值是 10 。到达限制后, #将再也不接受新链接,除非先前的链接认证成功或超出 LoginGraceTime 的限制。 MaxAuthTries 6 #指定每一个链接最大容许的认证次数。默认值是 6 。若是失败认证的次数超 #过这个数值的一半,链接将被强制断开,且会生成额外的失败日志消息。 UseDNS no #指定是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP #地址真实对应。 Banner /etc/issue.net #将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。 #这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。 Subsystem sftp /usr/lib/openssh/sftp-server #配置一个外部子系统(例如,一个文件 #传输守 护进程)。仅用于SSH-2协议。值是一个子系统的名字和对应的命令行(含选项和参数)。 UsePAM yes #是否使用PAM模块认证
根据本身的要求,本身配置就能够了。带 # 的表示注释掉了。网络
我本身的修改成:增长了 root登陆的权限。即:ssh
# 修改前 PermitRootLogin without-password # 修改后 PermitRootLogin yes
修改后之后,咱们须要从新启动服务:ide
#方法一: /etc/init.d/ssh restart # 方法二: service ssh restart
经过 service ssh status 能够查看服务的状态。
由于我用的是局域网,个人电脑在同一个网段里,因此登陆很简单,对于远程登陆的话, 没有去研究,暂时用不着。
1. 在主机上打开 ssh的服务。
2. 在另外一个机器上(前提安装为ssh的客户端,不过基本linux系统都会安装的)输入: ssh 用户名@IP地址 ,而后会提示你输入密码, 就OK了。
3. 若是退出的话,输入: exit.
对于这一步的设置,我也不请楚为何网上的设置这么复杂呢,个人设置以下:
1. 在服务端的配置文件中 /etc/ssh/sshd_config 中设置 X11Forwarding yes 选项,并重启 ssh 服务;
2. 在客户机的配置文件中 /etc/ssh/ssh_config 中设置 ForwardX11 yes 选项;
3. 在客户机登陆前 输入:xhost + 服务端的IP ,这个操做是:容许服务端的图形显示在客户机的显示器上;
4. 登陆:ssh 用户名@服务端IP;
5. 验证: 咱们能够登陆之后的窗口上输入一个图形显示的命令如:xclock,若是显示图形,则表示成功了。
注意:在不设置第2步前提时,第4步也能够这样登陆: ssh –X 用户名@服务端IP;
来自:http://xujpxm.blog.51cto.com/8614409/1717862。
一、SSH1 vs. SSH2
SSH协议规范存在一些小版本的差别,可是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00)。事实上,SSH1和SSH2是两个彻底不一样互不兼容的协议。SSH2明显地提高了SSH1中的不少方面。首先,SSH是宏设计,几个不一样的功能(如:认证、传输、链接)被打包进一个单一的协议,SSH2带来了比SSH1更强大的安全特性,如基于MAC的完整性检查,灵活的会话密钥更新、充分协商的加密算法、公钥证书等等。这就是用SecurityCRT的时候为何会让你选择ssh1仍是ssh2的缘由。
SSH2由IETF标准化,且它的实如今业界被普遍部署和接受。因为SSH2对于SSH1的流行和加密优点,如今几乎全部Linux新发行版中,OpenSSH服务器默认禁用了SSH1。
二、SSH基于密钥的安全验证
这种登录方式,须要依靠密钥,也就是说你必须为本身建立一对密钥对(公钥和私钥),而且把该公钥放到须要访问的服务器上。
注意:不能在须要访问的服务器上建立密钥,不然没法经过该密钥链接该服务器,可是经过该密钥链接其余服务器是正常的。
若是你要链接到ssh服务器,ssh客户端会向ssh服务器发出请求,请求用你的密钥进行安全验证。ssh服务器在收到该请求以后,会先在ssh服务器上,检查你登录的用户的主目录下寻找对应的公钥,而后把它和你发送过来的公钥进行比较。若是两个公钥一致,ssh服务器就用公钥加密“质询”(challenge)并把它发送给ssh客户端。ssh客户端在收到“质询”以后就能够用你的私钥解密该“质询”,再把它发送给ssh服务器。
3. /etc/hosts.allow 和/etc/hosts.deny
有些server会用这两个文件限制登录的ip,一般是deny里面deny all,而后再allow须要登录的ip地址;例如:
先禁止全部:
[root @test root]# cat /etc/hosts.deny
sshd: ALL : deny
再放行容许访问的ip:
[root @test root]# cat /etc/hosts.allow
sshd:10.10.10.* : allow 容许10.10.10.0/24网段登录
sshd: 192.168.2.2 : allow 容许192.168.2.2这个ip登录