感谢支持
我们一直在努力

SSH入门学习基础教程

在Linux系统中,OpenSSH是目前最流行的远程系统登录与文件传输应用,也是传统Telenet、FTP和R系列等网络应用的换代产品。其中,ssh(Secure Shell)可以替代telnet、rlogin和rsh,scp(Secure Copy)与sftp(Secure FTP)能后替代ftp。

OpenSSH采用密钥的方式对数据进行加密,确保数据传输的安全。在正式开始传输数据之前,双方首先要交换密钥,当收到对方的数据时,再利用密钥和相应的程序对数据进行解密。这种加密的数据传输有助于防止非法用户获取数据信息。

OpenSSH采用随机的方式生成公私密钥。密钥通常只需生成一次,必要时也可以重新制作。

当使用ssh命令登录到远程系统时,OpenSSH服务器的sshd守护进行将会发送一个公钥,OpenSSH客户端软件ssh将会提示用户确认是否接收发送的公钥。同时,OpenSSH客户端也会向服务器回传一个密钥,使OpenSSH连接双方的每个系统都拥有对方的密钥,因而能够解密对方经由加密链路发送的加密数据。

OpenSSH服务器的公钥与私玥均存储在/etc/ssh目录中。在OpenSSH客户端,用户收到的所有公钥,以及提供密钥的OpenSSH服务器的IP地址均存储在用户主目录下的~/.ssh/known_hosts文件中(.ssh是一个隐藏目录)。如果密钥与IP地址不再匹配,OpenSSH将会认为某个环节出了问题。例如,重新安装操作系统或者升级OpenSSH都会导致系统再次生成新的密钥,恶意的网络攻击也会造成密钥的变动。因此,当密钥发生变化时,总是应当先了解密钥发生变化的原因,以确保网络访问期间的数据安全。

通过OpenSSH远程登录时的延迟问题解决 http://www.linuxidc.com/Linux/2013-07/86879.htm

Ubuntu 12.10下OpenSSH的离线安装方法 http://www.linuxidc.com/Linux/2013-04/82814.htm

OpenSSH升级步骤及注意事项详解 http://www.linuxidc.com/Linux/2013-04/82123.htm

OpenSSH普通用户无法登录的几种情况的解决方法 http://www.linuxidc.com/Linux/2012-05/59457.htm

通用线程: OpenSSH 密钥管理,第 1 部分理解 RSA/DSA 认证 http://www.linuxidc.com/Linux/2011-08/39871.htm

RedHat安装OpenSSH和配置sftp锁定目录 http://www.linuxidc.com/Linux/2012-12/75398.htm

1 安装OpenSSH服务器

在Ubuntu中,OpenSSH的客户端作为一个基础系统软件会随这系统一起安装,但OpenSSH服务器需要单独安装。安装openssh-server服务器软件包,可以使用apt-get、aptitude或synaptic等软件工具。

$ sudo apt-get install openssh-server

安装之后,可以使用以下命令验证OpenSSH服务器的sshd守护进程是否已开启。

$ pidof sshd

2 使用SSH登录到远程系统

在OpenSSH中,ssh是一个重要的客户端应用程序。利用ssh,可以采用加密的通信方式,登录到远程系统,其语法格式如下:

ssh [options] [-l login_name][user@]hostname [command]

其中,”-llogin_name”选项用于指定用户名,表示以哪一个用户身份登录到远程系统。如果不提供用户名,则以当前用户的身份登录到远程系统。例如,下面命令形式表示以webgod用户身份,采用默认的22端口,登录到远程系统(注意,这里”Welcome to Ubuntu 12.04 LTS (GNU/Linux) ……https://helo.ubunut.com/”出自/etc/motd文件)。除了”-l”选项之外,为了以其他用户身份登录到远程系统,还可以使用”user@hostname”的方式登录到远程系统。

SSH入门学习基础教程

第一次使用ssh登录到远程系统时,ssh将会给出一个警告信息,提示用户确认连接的远程系统是否正确。如果用户确认yes,ssh将会在用户主目录的~/.ssh/known_hosts文件中存储远程系统的密钥,同时也会把客户端用户的密钥发送到远程系统。当用户再次登录到同一远程系统时,就不会再出现提示信息了。

3 使用ssh执行远程系统命令

具体用法,在ssh命令后增加一条命令,命令前后使用双引号括起来。

$ ssh webgod@10.203.138.129 “uname -r”

这种一次性登录,执行远程命令,然后立即返回的功能是非常有用的。

4 使用SCP替代FTP

从网络通信角度来看,FTP的数据传输方式是不安全的,因为FTP协议在网络中传输的用户名、密码和数据没有采取任何加密措施。比较安全的方法是采用OpenSSH的SFTP和SCP。

scp是OpenSSH中的另一个重要客户端软件。scp命令的格式如下:

scp [[user@host1:]file1[[user@]host2:]file2

第一个参数是源文件,第二个参数是目的文件。当需要复制远程系统中的文件时,SCP首先需要成功登录到远程系统中,然后才能开始传输文件,因此要求提供远程系统的名字、用户名和密码。

利用scp下载文件

例如,要把远程系统中的~/.ssh/id_rsa.pub文件复制到本地系统的/tmp目录中。

$ scp webgod@10.203.138.129:~/.ssh/id_rsa.pub /tmp

假定已经把sshd守护进程监听的TCP端口修改为435。要使用该端口进行文件复制,则可以用如下命令。

$ scp -P 534 webgod@10.203.138.129:~/.ssh/id_rsa.pub /tmp

利用scp上传文件

$ scp /etc/hosts webgod@10.203.138.129:/tmp

$ scp -P 435 /etc/hosts webgod@10.203.138.129: /tmp

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-06/103008p2.htm

下面是对SSH配置文件的一些选项的分解说明,ssh_config是OpenSSH客户端的配置文件,sshd_config是OpenSSH服务器端的配置文件。

ssh_config的内容如下:

# This is the ssh client system-wide configuration file. See ssh_config(5) for more information. This file provides defaults for users, and the values can be changed in

# er-user configuration files or on the command line.

# Configuration data is parsed as follows:// 配置选项生效的优先级
# 1. command line options// 命令行选项
# 2. user-specific file// 用户指定文件
# 3. system-wide file// 系统范围的文件
# Any configuration value is only changed the first time it is set. Thus, host-specific definitions should be at the beginning of the configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options. For a comprehensive list of available options, their meanings and defaults, please see the ssh_config(5) man page.

Host *// 使用的计算机范围,’*’表示全部
# ForwardAgent no// 设置连接是否经过验证代理(如果存在)转发给远程计算机
# ForwardX11 no// 设置X11连接是否被自动重定向到安全的通道和显示集
# ForwardX11Trusted yes// 是否允许转发X11会话
# RhostsRSAAuthentication no// 设置是否使用RSA进行rhosts的安全验证
# RSAAuthentication yes// 设置是否使用RSA进行安全验证
# PasswordAuthentication yes// 设置是否需要口令验证
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no// 如果为yes,则交互输入口令时的提示(passphrase/password的提示)信息将被禁止
# CheckHostIP yes// 设置SSH是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask// 如果设置成yes,SSH就不会自动把计算机的密钥加入$HOME/.ssh/known_hosts文件,并且一旦计算机的密匙发生了变化,就拒绝连接
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa// RSA安全验证文件的位置
# IdentityFile ~/.ssh/id_dsa// DSA安全验证文件的位置
# Port 22// 服务器端口
# Protocol 2,1// 使用的SSH协议
# Cipher 3des// 设置加密的方式
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~// 设置Escape(转义)字符
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
SendEnv LANG LC_*// 局部环境变量
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no

 

sshd_config的内容如下:

# Package generated configuration file See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22// sshd的监听端口号,默认为22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0// 设置sshd服务绑定的IP地址,0.0.0.0表示侦听所有地址
Protocol 2// 默认只使用2.*版本的SSH协议
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key// SSH2版本的RSA密钥存放位置
HostKey /etc/ssh/ssh_host_dsa_key// SSH2版本的DSA密钥存放位置
HostKey /etc/ssh/ssh_host_ecdsa_key// SSH2版本的ECDSA密钥存放位置
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600// 密钥每隔1小时生成一次
ServerKeyBits 768// SSH服务器密钥的位数

# Logging
SyslogFacility AUTH// 设置sshd发送到syslog所使用的日志类型
// 设置在记录来自sshd的消息时是否给出facility code
LogLevel INFO// syslog日志级别

# Authentication:
LoginGraceTime 120// 设置如果用户不能成功登录,sshd将会在这个配置参数指定的时间过后断开连接(单位为秒)
PermitRootLogin yes// 如果为yes则允许root用户使用ssh登录,为no则表示不允许root进行ssh登录
StrictModes yes// 设置sshd在接受登录请求前是否检查用户的主目录以及rhosts文件的权限和所有者等信息。防止目录和文件设成任何人都有写权限

RSAAuthentication yes// 是否允许RSA验证
PubkeyAuthentication yes// 是否允许公钥验证
AuthorizedKeysFile%h/.ssh/authorized_keys// 公钥文件存放的位置

# Don’t read the user’s ~/.rhosts and ~/.shosts files
IgnoreRhosts yes// 验证时是否使用’~/.rhosts’和’~/.shosts’文件
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no// 设置是否允许用rhosts或/etc/hosts.equiv加上RSA进行安全验证
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don’t trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes// 设置sshd在进行RhostsRSAAuthentication安全验证时是否信任用户的’~/.ssh/known_hosts’文件

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no// 设置是否允许用空口令登录

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no// 设置是否允许使用提示/应答式认证。sshd支持login.conf文件中定义的所有认证类型

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes// 设置是否需要口令验证,默认为yes

# Kerberos options// Kerneros验证
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options// GSSAPI 验证
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes// 清除验证信息

X11Forwarding yes// 设置sshd是否允许X11转发,默认为允许
X11DisplayOffset 10
PrintMotd no// 设置sshd是否在用户登录时显示/etc/motd中的信息
PrintLastLog yes// 交互式登录时是否输出用户上次登录的日期和时间
TCPKeepAlive yes// TCP活动保持
#UseLogin no// 指定login命令是否可用于交互式登录会话

#MaxStartups 10:30:60
#Banner /etc/issue.net// 设置保存banner信息的文件位置,用户登录后会显示该banner信息

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*// 指定客户端发送的那些环境变量能后复制到当前会话的运行环境(客户端需要设置其配置文件ssh_config中的SendEnv参数)

Subsystem sftp /usr/lib/openssh/sftp-server// 用于配置一个外部的服务程序,如文件传输服务器sftp-server。配置参数的值应该是一个系统名与命令,能够基于客户系统的请求开始运行。sftp-server命令实现了sftp文件传输子系统。这个配置参数仅使用与SSH2

# Set this to ‘yes’ to enable PAM authentication, account processing, and session processing. If this is enabled, PAM authentication will be allowed through the

# ChallengeResponseAuthentication and PasswordAuthentication. Depending on your PAM configuration, PAM authentication via ChallengeResponseAuthentication

# may bypass the setting of “PermitRootLogin without-password”. If you just want the PAM account and session checks to run without PAM authentication, then enable

#this but set PasswordAuthentication and ChallengeResponseAuthentication to ‘no’.

UsePAM yes// 是否启用PAM插件式认证模块,默认为yes

通常情况下,每次使用ssh登录或使用scp复制远程系统的文件时,都需要提供密码,然后才能做进一步的处理。为了省略输入密码这一步骤,有时可以采用Shell脚本的方法解决,但这需要把手工输入的密码以明码形式放在脚本文件中。

利用密钥配置文件,OpenSSH可以是ssh远程登录与scp文件复制的操作过程中省略密码验证的中间环节。为此,ssh客户端首先应建立OpenSSH连接,然后自动地想服务器发送其公钥。之后,服务器即可根据相应用户主目录中预定义的密钥列表,对收到的密钥进行比较。如果存在匹配的密钥,服务器将会允许ssh或sco自动登录。

密钥文件需要单独生成,生成后的密钥文件存储在服务器用户主目录的~/.ssh子目录中。其中,id_rsa和id_rsa.pub文件分别是私玥和公钥,而authorized_keys文件则用于存储所有授权的远程客户系统的公钥,使得远程客户系统能够以此用户的身份登录到本地系统而无需提供密码。

为了实现ssh和scp的无密码登录,需要事先生成并安装远程登录与数据传输的密钥,其唯一的限制是需要把密钥绑定到两个系统的IP地址上。然后,服务器即可使用预安装的密钥,对每一次的远程登录和文件传输进行验证。但是,这以功能不适合于利用DCHP协议动态分配IP地址,致使IP地址经常发送变化的情况。

由于只需知道用户名即可实现远程注册和文件传输,而无需提供密码,这一功能是有安全风险的。因此,在具体实现时,在服务器与客户端之间最好采用普通用户账号,以免造成较大的破坏。

下面以webgod用户为例,详细说明在实现ssh和scp的无密码登录之前,OpenSSH的客户端与服务器双方事先都需要做哪些准备工作。

1 客户端配置

在客户端与服务器系统中分别创建一个同名为webgod用户,然后以webgod用户的身份登录到客户端系统,使用ssh-keygen命令生成一对密钥。当系统提示输入一个与密钥相关联的密码时,直接按下Enter键。

SSH入门学习基础教程

生成的两个密钥文件均存储在webgod用户主目录的.ssh子目录中。其中,id_rsa文件中存储的是私玥,id_rsa.pub文件中存储的是公钥(用于提交远程服务器,解密客户端传输的加密数据)。

SSH入门学习基础教程

采用如下命令,把生成的公钥文件id_rsa.pub复制到远程系统的webgod用户主目录中。

$ scp ~/.ssh/id_rsa.pub webgod@10.203.131.191:pub_key

2 服务器配置

在OpenSSH服务器中,以webgod用户登录,然后使用cat命令和”>>”重定向符号,把pub_key文件中的数据追加到authorized_keys文件的末尾。

$ cat ~/pub_key >>~/.ssh/authorized_keys

authorized_keys文件包含所有OpenSSH客户端系统的公钥列表,如果表中列举的客户系统中的webgod用户仍以同一身份连接到服务器,则无需提供密码。

3 示例

在完成上述全部设置之后,当OpenSSH客户端的webgod用户以webgod身份,使用ssh、scp或sftp连接到远程主机,就不会再提示用户输入密码了。

但这一方法对客户端的其他用户无效,即使他们也以webgod用户的身份登陆到远程服务器,仍需提供密码。

OpenSSH是Linux/Unix下一款加密通讯软件,同时也是我们用来远程控制Linux/Unix服务器重要的必装软件。对于各版本的Linux及Unix发行版而言,OpenSSH的配置文件位置都各不一样。如Ubuntu下OpenSSH配置文件就在/etc/ssh/sshd_config。

OpenSSH安全选项:
// OpenSSH打开的端口号
LoginGraceTime 120 // 客户端连接服务器成功后多少秒未登陆就被强制关闭连接
PermitRootLogin yes // 是否允许Root用户登陆,yes为允许,no为禁止,为了安全起见,建议修改为no,防止被暴力破解
        AllowUsers webgod // 允许登陆的用户,默认不存在
        AllowGroups webgod // 允许登陆的用户组,默认不存在
        DenyUsers webgod // 禁止登陆的用户,默认不存在
        DenyGroups webgod // 禁止登陆的用户组,默认不存在

为了安全起见,可以把默认的22号端口修改为其他的空闲端口号(如435等),防止被扫描。同时,还需要把/etc/services文件中的ssh端口定义为:
 
        ssh            22/tcp
 
        ssh            22/udp
 
        此外,也可以使用AllowUsers、AllowGroups、DenyGroups以及DenyUsers配置参数,或者它们的组合,限定用户或用户组的访问权限。例如,为了限定只有webgod用户能够访问系统,可以在/etc/ssh/sshd_config配置文件中增加下列配置参数
 
        AllowUsers      webgod
 
        重新启动sshd之后,除了webgod用户,系统将会拒绝接收其他用户的登录,并输出拒绝访问的错误信息。
 
        修改OpenSSH配置文件之后,为了使新的设置生效,需要重新启动sshd守护进程。
 
        $ sudo /etc/init.d/ssh restart

附:与SSH有关的配置文件:

OpenSSH的设置文件和主要文件存放在/etc/ssh/目录中,主要包括如下文件:
 
/etc/ssh/sshd_config:sshd服务器的设置文件
 
/etc/ssh/ssh_config:ssh客户机的设置文件
 
/etc/ssh/ssh_host_key:SSH1用的RSA私钥
 
/etc/ssh/ssh_host_key.pub:SSH1用的RSA公钥
 
/etc/ssh/ssh_host_rsa_key:SSH2用的RSA私钥
 
/etc/ssh/ssh_host_rsa_key.pub:SSH2用的RSA公钥
 
/etc/ssh/ssh_host_dsa_key:SSH2用的DSA私钥
 
/etc/ssh/ssh_host_dsa_key.pub:SSH2用的DSA公钥

OpenSSH 的详细介绍:请点这里
OpenSSH 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-06/103008.htm

赞(0) 打赏
转载请注明出处:服务器评测 » SSH入门学习基础教程
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏