内容预知
1.SSH的介绍及其相关知识点
SSH 为 Secure shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH 启用的端口为:TCP22号端口

SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

SSH客户端:putty(开源工具),xshell,CRT
SSH服务端:openSSH(centos7系统默认安装)
centos7 ssh服务启动自检命令: systemctl is-enabled sshd
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。而ssh密钥就是一种非对称性的密钥。
ssh 远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。
密钥登录的过程:
1. ssh客户端通过ssh-keygen生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录

2. SSH的运用
在Linux中实现ssh,是通过openSSH的sshd服务提供的。
/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
常用选项配置
#Port 22
#ListenAddress 0.0.0.0

常用配置项:
#LoginGraceTime 2m 登录验证时间为两分钟
#PermitRootLogin yes 允许root用户登录(安全考虑,这里可以设置为no,禁止root用户登录)
#MaxAuthTries 6 最大重试的次数为6
PasswordAuthentication yes 允许空密码用户登录
UseDNS no 禁止DNS反向解析,提高服务器的响应速度
/etc/ssh/ssh_config (该配置基本默认保持不变,就可以了)
ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p port]
[root@localhost7 ~]# ssh 192.168.73.110
exit 退出当前用户

[root@localhost7 ~]# ssh -p 22 zhangsan@192.168.73.110

ssh scp sftp 都是默认使用ssh协议,端口为 tcp 22
scp [-r 目录] 文件 [用户]@服务端IP:保存路径(如果端口号修改过,就用-P进行指定)
[root@localhost6 opt]# scp shiyan.zip root@192.168.73.111:/opt

scp [-P] [用户]@服务端IP:保存路径 本地路径
[root@localhost6 opt]# scp root@192.168.73.111:/opt/shiyan.zip /opt

sftp [-P] 用户@服务端IP (当默认端口改变时,可以用-P指定)
[root@localhost6 opt]# sftp root@192.168.73.111

3. ssh密钥登录操作
上面的内容均为在密码登录的前提,但是存在着极大的安全隐患。密码登录是可以别破译密码软件进行暴力破解,从而远程访问,此时会造成相关的损失。而密钥登录,会对安全性访问更有利。
准备两台虚拟机,一台当作ssh客户端,一台当作ssh服务端,检查一下ssh相关服务的软件包和功能是否正常即可。

一组密钥对是客户端的某一个用户和服务端的某一个用户之间建立的联系,其他用户无法使用该密钥获取登录
[root@localhost6 ~]# ssh-keygen -t rsa

[zhangsan@localhost ~]$ cd /home/zhangsan/.ssh
[zhangsan@localhost .ssh]$ ls

[zhangsan@localhost .ssh]$ scp id_rsa.pub root@192.168.73.111:/opt

切换到服务端,安置公钥
cd /opt/
ls
vim /root/.ssh/authorized_keys

末行模式
:!cat /opt/id_rsa.pub
并且保存退出
ssh-copy-id -i 公钥文件 用户@服务端IP
[zhangsan@localhost .ssh]$ ssh root@192.168.73.111

[root@localhost ~]# ssh root@192.168.73.111

[zhangsan@localhost .ssh]$ ssh wangwu@192.168.73.111

4.TCP_wapper的原理和运用
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。

/etc/hosts.allow 设置允许访问 tcp 服务程序的策略(白名单)
/etc/hosts.deny 设置禁止访问 tcp 服务程序的策略 (黑名单)
只允许IP地址为192.168.73.110的用户访问sshd服务,其他地址被拒绝。
白名单设置:
vim /etc/hosts.allow
sshd:192.168.73.110

如果不确定该服务是否符合TCP_wapper的标准:
[root@localhost ~]# ldd $(which sshd)|grep wrap

黑名单设置:
vim /etc/hosts.deny
sshd:ALL

保存后,立即生效!
测试一:指定允许的客户端使用

测试二:其他客户端进行访问

黑名单和白名单的设置原理:先看 hosts.allow 文件中的设置,匹配上则直接放通,如果没有匹配则 再去看 hosts.deny 文件中的设置,匹配上则禁止/拒绝访问指定的tcp服务程序,如果也没有匹配上则默认允许放通
总结
1. 熟知ssh密钥生成的过程,用于对ssh访问的加密,符合更安全的远程控制标准
2.当我们获得一台新的服务器时,为了更安全,取消掉root用户的远程访问
3.ssh中有更高效的传输获取功能,可以加以利用。
4.TCP_Wrappers中的黑白名单,可以大量高效的设置可访问服务端的用户及其能够访问的服务
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo