zoukankan      html  css  js  c++  java
  • linux服务之ssh

    架构:c/s

    开发语言:c语言

    服务器端:在linux平台下部署

    客户端:一般是cli界面下的ssh命令

    官网:http://www.openssh.com/portable.html

    25个必须记住的ssh命令  http://www.cnblogs.com/weafer/archive/2011/06/10/2077852.html

     

    背景说明

    The portable OpenSSH follows development of the official version, but releases are not synchronized. Portable releases are marked with a 'p' (e.g. 4.0p1). The official OpenBSD source will never use the 'p' suffix, but will instead increment the version number when they hit 'stable spots' in their development. 

    centos7相关包

    [root@my bin]# cat /etc/redhat-release
    CentOS Linux release 7.1.1503 (Core)
    [root@my bin]# rpm -qa|grep ssh
    openssh-server-6.6.1p1-11.el7.x86_64
    openssh-clients-6.6.1p1-11.el7.x86_64
    libssh2-1.4.3-8.el7.x86_64
    openssh-6.6.1p1-11.el7.x86_64

    小技巧1.

    ssh免密码登录
    要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例。
    有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。
    
    1.在A机下生成公钥/私钥对。
    [root@A ~]# ssh-keygen -t rsa -P ''
    -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
    该命令将在/root/.ssh目录下面产生一对密钥id_rsa和id_rsa.pub。
    一般采用的ssh的rsa密钥:
    id_rsa     私钥
    id_rsa.pub 公钥
    下述命令产生不同类型的密钥
    ssh-keygen -t dsa
    ssh-keygen -t rsa
    ssh-keygen -t rsa1
    2.把A机下的/root/.ssh/id_rsa.pub 复制到B机并重命名为/root/.ssh/authorized_keys文件
    [root@A ~]# scp /root/.ssh/id_rsa.pub 192.168.1.181:/root/.ssh/authorized_keys
    由于还没有免密码登录的,所以要输入一次B机的root密码。
    3.authorized_keys的权限要是600!!!要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。直接scp过去后权限是644,也可以
    4.A机登录B机。第一次登录是时要你输入yes。现在A机可以无密码登录B机了。

    小技巧2.Broken问题

    解决ssh的"Write failed: Broken pipe"问题
    问题场景
    服务器环境:阿里云 Linux CentOS 主机
    客户端:Mac OSX Terminal
    问题现象
    用 ssh 命令连接服务器之后,如果一段时间不操作,再次进入 Terminal 时会有一段时间没有响应,然后就出现错误提示:
    Write failed: Broken pipe
    只能重新用 ssh 命令进行连接。
    解决方法
    方法一:如果您有多台服务器,不想在每台服务器上设置,只需在客户端的 ~/.ssh/ 文件夹中添加 config 文件,并添加下面的配置:
    ServerAliveInterval 60
    方法二:如果您有多个人管理服务器,不想在每个客户端进行设置,只需在服务器的 /etc/ssh/sshd_config 中添加如下的配置:
    ClientAliveInterval 60
    方法三:如果您只想让当前的 ssh 保持连接,可以使用以下的命令:
    $ ssh -o ServerAliveInterval=60 user@sshserver

    小技巧3.bogon问题,bogon虚拟,虚伪的意思

    [root@manage ~]# ssh 192.168.1.96
    Address 192.168.1.96 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
    出现上面这个报错时,用如下方法解决
    如果是hostA ssh hostB只需要修改hostA的/etc/ssh/ssh_config客户端配置文件,将下面的yes变成no即可
    Host *
            GSSAPIAuthentication no

    bogon是指那些不该出现在internet路由表中的地址。
    这些地址应该包括:
    1,私有地址如10,172.16-32,192.168.....
    2,还未正式分配出去的地址

    小技巧4.普通用户只使用sftp

    使普通用户仅使用SFTP而没有使用Shell的权限

    使用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和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-server2.static -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-shell.static 其中带“static”后缀名,且比较大的两个文件就是加上“--enable-static”选项后生成的,后面我们将用到这里两个文件。 下面以添加普通账号test为例讲述具体操作步骤。 1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令: [root@localhost bin]# cd /usr/local/ssh3.2/bin [root@localhost bin]#cp ssh-dummy-shell.static /home/bin/ssh-dummy-shell [root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server [root@localhost bin]#chown -R root.root /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 root.root /home/test/bin [root@localhost bin]#chmod -R 755 /home/test/bin 4.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容: #ChRootGroups sftp,guest 改为: ChRootGroups sftp,guest,template 修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样可以使包含在template组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容: #ChRootUsers anonymous,ftp,guest



    第二种方法 openssh-server的方法

    众所周知SFTP账号是基于SSH账号的,所以在默认情况下访问服务器的权限是非常大的,今天的教程就是教大家进行SFTP用户权限设置。
    必要条件:
    你的openssh-server版本至少得失4.8p1, 因为配置权限需要版本添加的新配置项ChrootDirectory来完成。
    如何查看自己服务器上的ssh版本?大家可以尝试以下命令:
    $ ssh -V
    具体实施步骤:
    1. 我们需要创建一个用户组,专门用于sftp用户
    $ groupadd sftpusers
    2. 我们创建一个用户test
    $ useradd -s /bin/false -G sftpusers test
    注意这里我们将test用户的shell设置为/bin/false使他没有登陆shell的权限
    3. 编辑 /etc/ssh/sshd_config
    找到Subsystem这个配置项,将其修改为
    Subsystem sftp internal-sftp
    然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问他们自己的家目录
    Match Group sftpusers
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
    保存并关闭文件
    4. 修改test用户home文件夹的权限,让其属于root用户
    chown root ~test
    5. 重启sshd服务
    $ service sshd restart
    6. 测试用户账号
    $ ssh test@localhost
    连接会被拒绝或者无法登陆
    $ sftp tesst@localhost
    登陆后你会发现你的账号无法切换到除自己home目录之外的地方的
    常见问题:
    如果你链接服务器的时候出现下面的提示:
    Write failed: Broken pipe
    Couldn't read packet: Connection reset by peer
    这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。

    服务器sshd_config参数说明

    
    
    文件
         /etc/ssh/sshd_config
                 sshd(8) 的主配置文件。这个文件的宿主应当是root,权限最大可以是"644"。
    这个文件的每一行包含“关键词-值”的匹配,其中“关键词”是忽略大小写的。下面列出来的是最重要的关键词,用man命令查看帮助页(sshd (8))可以得到详细的列表。
    默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。配置文件是由"指令 值"对组成的,每行一个。空行和以'#'开头的行都将被忽略。
    如果值中含有空白符或者其他特殊符号,那么可以通过在两边加上双引号(")进行界定。[注意]值是大小写敏感的,但指令是大小写无关的。

    配置指令
    AddressFamily 指定 sshd(
    8) 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。 AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。 指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。也可以使用多个 AcceptEnv 达到同样的目的。 需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。由于这个原因,该指令应当小心使用。 默认是不传递任何环境变量。 AllowGroups 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。 如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。 这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。 这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups AllowTcpForwarding 是否允许TCP转发,默认值为"yes"。 禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。 AllowUsers 这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。 如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。 如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。 这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups AuthorizedKeysFile 存放该用户可以用来登录的 RSA/DSA 公钥。 该指令中可以使用下列根据连接时的实际情况进行展开的符号: %% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名。 经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。 默认值是".ssh/authorized_keys"。 Banner 将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。 这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。 [root@250-shiyan flt]# vi /etc/ssh/sshd_config Banner /home/flt/a [root@250-shiyan flt]# echo 0000000000 > /home/flt/a ChallengeResponseAuthentication 是否允许质疑-应答(challenge-response)认证。默认值是"yes"。 所有 login.conf(5) 中允许的认证方式都被支持。 Ciphers 指定SSH-2允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下:"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr", "3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc",默认值是可以使用上述所有算法。 ClientAliveCountMax sshd(8) 在未收到任何客户端回应前最多允许发送多少个"alive"消息。默认值是 3 。到达这个上限后,sshd(8) 将强制断开连接、关闭会话。需要注意的是,"alive"消息与 TCPKeepAlive 有很大差异。"alive"消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是可以被欺骗的。如果 ClientAliveInterval 被设为 15 并且将 ClientAliveCountMax 保持为默认值, 那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议。 ClientAliveInterval 设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd(8) 将通过安全通道向客户端发送一个"alive"消息,并等候应答。默认值 0 表示不发送"alive"消息。这个选项仅对SSH-2有效。 Compression 是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。 可用值:"yes", "delayed"(默认), "no"。 DenyGroups 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。 如果使用了这个指令,那么这些组中的成员将被拒绝登录。 这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。 这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups DenyUsers 这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。 如果使用了这个指令,那么这些用户将被拒绝登录。 如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。 这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups ForceCommand 强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录shell执行(shell -c)。 这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。 这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。 GatewayPorts 是否允许远程主机连接本地的转发端口。默认值是"no"。 sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其它远程主机连接到转发端口。 GatewayPorts 指令可以让 sshd 将远程端口转发绑定到非loopback地址,这样就可以允许远程主机连接了。 "no"表示仅允许本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address), "clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。 GSSAPIAuthentication 是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。 GSSAPICleanupCredentials 是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。 HostbasedAuthentication 这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。推荐使用默认值"no"。 推荐使用默认值"no"禁止这种不安全的认证方式。 HostbasedUsesNameFromPacketOnly 在开启 HostbasedAuthentication 的情况下, 指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。 "yes"表示 sshd(8) 信任客户端提供的主机名而不进行反向查询。默认值是"no"。 HostKey 主机私钥文件的位置。如果权限不对,sshd(8) 可能会拒绝启动。 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。 IgnoreRhosts 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。 不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。 IgnoreUserKnownHosts 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。 默认值是"no"。为了提高安全性,可以设为"yes"。 KerberosAuthentication 是否要求用户为 PasswordAuthentication 提供的密码必须通过 Kerberos KDC 认证,也就是是否使用Kerberos认证。 要使用Kerberos认证,服务器需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。 KerberosGetAFSToken 如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后, 将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。 KerberosOrLocalPasswd 如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。 默认值为"yes"。 KerberosTicketCleanup 是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。 KeyRegenerationInterval 在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。 这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。 设为 0 表示永不重新生成,默认为 3600(秒)。 ListenAddress 指定 sshd(8) 监听的网络地址,默认监听所有地址。可以使用下面的格式: ListenAddress host|IPv4_addr|IPv6_addr ListenAddress host|IPv4_addr:port ListenAddress [host|IPv6_addr]:port 如果未指定 port ,那么将使用 Port 指令的值。 可以使用多个 ListenAddress 指令监听多个地址。 LoginGraceTime 限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。 LogLevel 指定 sshd(8) 的日志等级(详细程度)。可用值如下: QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3 DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。 比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,因此反对使用。 MACs 指定允许在SSH-2中使用哪些消息摘要算法来进行数据校验。 可以使用逗号分隔的列表来指定允许使用多个算法。默认值(包含所有可以使用的算法)是: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96 Match 引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾。 如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。 Match 的值是一个或多个"条件-模式"对。可用的"条件"是:User, Group, Host, Address 。 只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner, ForceCommand, GatewayPorts, GSSApiAuthentication, KbdInteractiveAuthentication, KerberosAuthentication, PasswordAuthentication, PermitOpen, PermitRootLogin, RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset, X11Forwarding, X11UseLocalHost MaxAuthTries 指定每个连接最大允许的认证次数。默认值是 6 。 如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。 MaxStartups 最大允许保持多少个未认证的连接。默认值是 10 。 到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。 PasswordAuthentication 是否允许使用基于密码的认证。默认为"yes"。 PermitEmptyPasswords 是否允许密码为空的用户远程登录。默认为"no"。 PermitOpen 指定TCP端口转发允许的目的地,可以使用空格分隔多个转发目标。默认允许所有转发请求。 合法的指令格式如下: PermitOpen host:port PermitOpen IPv4_addr:port PermitOpen [IPv6_addr]:port "any"可以用于移除所有限制并允许一切转发请求。 PermitRootLogin 是否允许 root 登录。可用值如下: "yes"(默认) 表示允许。"no"表示禁止。 "without-password"表示禁止使用密码认证登录。 "forced-commands-only"表示只有在指定了 command 选项的情况下才允许使用公钥认证登录。同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。 PermitTunnel 是否允许 tun(4) 设备转发。可用值如下: "yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默认)。"yes"同时蕴含着"point-to-point"和"ethernet"。 PermitUserEnvironment 指定是否允许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。 默认值是"no"。如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。 PidFile 指定在哪个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件。 Port 指定 sshd(8) 守护进程监听的端口号,默认为 22 。可以使用多条指令监听多个端口。 默认将在本机的所有网络接口上监听,但是可以通过 ListenAddress 指定只在某个特定的接口上监听。 PrintLastLog 指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。默认值是"yes"。 PrintMotd 指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。默认值是"yes"。 Protocol 指定 sshd(8) 支持的SSH协议的版本号。'1'和'2'表示仅仅支持SSH-1和SSH-2协议。"2,1"表示同时支持SSH-1和SSH-2协议。 PubkeyAuthentication 是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。 RhostsRSAAuthentication 是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。 这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。 出于安全考虑,建议使用默认值"no"。 RSAAuthentication 是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。 ServerKeyBits 指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。 StrictModes 指定是否要求 sshd(8) 在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查。 强烈建议使用默认值"yes"来预防可能出现的低级错误。 Subsystem 配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。 值是一个子系统的名字和对应的命令行(含选项和参数)。比如"sft /bin/sftp-server"。 SyslogFacility 指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是: DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7
    “SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。 TCPKeepAlive 指定系统是否向客户端发送 TCP keepalive 消息。默认值是
    "yes"。 这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。 可以设为"no"关闭这个特性。 UseDNS 指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应。默认值为"yes"
    如果出现连接很慢,可以考虑将此默认值从yes设为no
    如果这个方法不生效,可以设置这个GSSAPIAuthentication no
    UseLogin 是否在交互式会话的登录过程中使用 login(
    1) 。默认值是"no"。 如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login(1) 不知道如何处理 xauth(1) cookies 。 需要注意的是,login(1) 是禁止用于远程执行命令的。 如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。 UsePrivilegeSeparation 是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。 认证成功后,将以该认证用户的身份创建另一个子进程。 这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。 X11DisplayOffset 指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。 这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。 X11Forwarding 是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。 如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。 那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。 需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。 如果启用了 UseLogin ,那么X11转发将被自动禁止。 X11UseLocalhost sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。 sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。 这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。 为了兼容这些老旧的X11客户端,你可以设为"no"。 XAuthLocation 指定 xauth(1) 程序的绝对路径。默认值是 /usr/X11R6/bin/xauth 时间格式 在 sshd(8) 命令行参数和配置文件中使用的时间值可以通过下面的格式指定:time[qualifier] 。 其中的 time 是一个正整数,而 qualifier 可以是下列单位之一: <无> 秒 s | S 秒 m | M 分钟 h | H 小时 d | D 天 w | W 星期 可以通过指定多个数值来累加时间,比如: 1h30m 1 小时 30 分钟 (90 分钟)

    客户端ssh_config参数说明

    关于客户端设置
    
    linux客户端
    
    配置“/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字符。
    
    windows客户端
    其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下面就对Windows上的客户端系统设置加以说明。
    一,查看版本
    [root@host02 ~]# ssh -V
    OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010                    表明该系统正在使用OpenSSH
    ssh -V
    ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu    表明该系统正在使用SSH2
    
    二,首次使用
    当你第一次使用ssh登录远程主机时,会出现没有找到主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到你的主目录下的 .ssh/hostkeys下,这样你就可以继续操作了。因为远程主机的密钥已经加入到ssh客户端的已知主机列表中,当你第二次登陆远程主机时,只需要你输入远程主机的登录密码即可。
    
    三,密钥改变
    由于各种原因,可能在你第一次登陆远程主机后,该主机的密钥发生改变,你将会看到一些警告信息。出现这种情况,可能有两个原因:
    1.系统管理员在远程主机上升级或者重新安装了SSH服务器
    2.有人在进行一些恶意行为,等等。
    
    四,调试ssh客户端会话
    [root@CentOS5 ~]# ssh -v 172.16.1.14
    OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug1: Connecting to 172.16.1.14 [172.16.1.14] port 22.
    debug1: Connection established.
    debug1: permanently_set_uid: 0/0
    debug1: identity file /root/.ssh/identity type -1
    debug1: identity file /root/.ssh/id_rsa type -1
    debug1: identity file /root/.ssh/id_dsa type -1
    debug1: loaded 3 keys
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
    debug1: match: OpenSSH_5.3 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_4.3
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-cbc hmac-md5 none
    debug1: kex: client->server aes128-cbc hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Host '172.16.1.14' is known and matches the RSA host key.
    debug1: Found key in /root/.ssh/known_hosts:6
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
    debug1: Next authentication method: gssapi-with-mic
    debug1: Unspecified GSS failure.  Minor code may provide more information
    No credentials cache found
    debug1: Unspecified GSS failure.  Minor code may provide more information
    No credentials cache found
    debug1: Unspecified GSS failure.  Minor code may provide more information
    No credentials cache found
    debug1: Next authentication method: publickey
    debug1: Trying private key: /root/.ssh/identity
    debug1: Trying private key: /root/.ssh/id_rsa
    debug1: Trying private key: /root/.ssh/id_dsa
    debug1: Next authentication method: password
    root@172.16.1.14's password:
    debug1: Authentication succeeded (password).
    debug1: channel 0: new [client-session]
    debug1: Entering interactive session.
    debug1: Sending environment.
    debug1: Sending env LANG = en_US.UTF-8:zh_CN.gb2312
    Last login: Tue Apr 22 14:35:00 2014 from 172.16.1.12
    
    五,临时切换到本地
    要临时回到本地主机,输入退出符号:“~”与“Control-Z”组合。
    当你输入“~”你不会立即在屏幕上看到,当你按下<Control-Z>并且按回车之后才一起显示。
    [root@host02 ~]# ~^Z [suspend ssh]
    [1]+  Stopped                 ssh -v 172.16.1.14
    [root@CentOS5 ~]# jobs
    [1]+  Stopped                 ssh -v 172.16.1.14
    [root@CentOS5 ~]# fg 1
    ssh -v 172.16.1.14
    [root@host02 ~]#
    
    六,
    要想取得一些关于当前会话有用的信息,可以按以下方式完成。不过这只能在SSH 2 客户端上使用。
    输入ssh退出字符~并输入s。这样会显示出很多有关当前ssh连接的有用信息

    =================================
    ssh本地转发
    http://blog.csdn.net/sunansheng/article/details/50927687
    ssh -L 7001:localhost:389 LdapServerHost

    ssh -R 7001:localhost:389 123.138.111.146 -p50090
    sqldeveloper的ssh连接,先在ssh windows中建立ssh连接,只能建立本地端口连接,然后在数据库连接中选择。
    ssh server上不需要做什么
    端口转发默认是开启的
    105 #AllowAgentForwarding yes
    106 #AllowTcpForwarding yes
    除非要关
    AllowTcpForwarding no
    107 GatewayPorts no//与这个没有关系

    ssh hosts中的ssh连接如果断了,db连接也会断

    ===============================

    X11forward

    只要xserver中的显示号与windows中的putty中的x11的显示号一样就可以了,与xclient中的display无关
    这三个号
    Xming server:16.0
    localhost:16.0
    [root@oracle4 ~]# echo $DISPLAY
    localhost:10.0

  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/createyuan/p/3796378.html
Copyright © 2011-2022 走看看