Difference between revisions of "Secure Shell (简体中文)"

From ArchWiki
Jump to: navigation, search
(设置SSH)
Line 20: Line 20:
 
  pacman -S openssh
 
  pacman -S openssh
  
== 设置SSH服务器 ==
+
== 配置SSH ==
你要更改下面的配置文件:
+
===客户端===
$ su -c 'nano /etc/ssh/sshd_config'
+
SSH客户端的配置文件是{{Filename|/etc/ssh/ssh_config}}。
  
你可能想要把默认的端口从22改成其它更高的端口(参考 [http://en.wikipedia.org/wiki/Security_through_obscurity security through obscurity])。
+
以下是一个范例::
  
尽管ssh运行的端口可以被像nmap这样的端口扫描器侦测到,改变它可以减少由于自动验证的尝试造成登录次数?( reduce the number of log entries caused by automated authentication attempts.)
+
{{File|name=/etc/ssh/ssh_config|content=
 
+
# $OpenBSD: ssh_config,v 1.26 2010/01/11 01:39:46 dtucker Exp $
=== 调整设置 ===
+
配置文件是“/etc/ssh/ssh_config”,通常是像这样的:
+
 
+
<pre>
+
# $OpenBSD: sshd_config,v 1.75 2007/03/19 01:01:29 djm Exp $
+
  
 
# This is the ssh client system-wide configuration file.  See
 
# This is the ssh client system-wide configuration file.  See
Line 47: Line 42:
 
# configuration file, and defaults at the end.
 
# configuration file, and defaults at the end.
  
# Site-wide defaults for various options
+
# 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 *
 
# Host *
Line 56: Line 53:
 
#  PasswordAuthentication yes
 
#  PasswordAuthentication yes
 
#  HostbasedAuthentication no
 
#  HostbasedAuthentication no
 +
#  GSSAPIAuthentication no
 +
#  GSSAPIDelegateCredentials no
 
#  BatchMode no
 
#  BatchMode no
 
#  CheckHostIP yes
 
#  CheckHostIP yes
Line 67: Line 66:
 
#  Protocol 2,1
 
#  Protocol 2,1
 
#  Cipher 3des
 
#  Cipher 3des
#  Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
+
#  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 ~
 
#  EscapeChar ~
</pre>
+
#  Tunnel no
 +
#  TunnelDevice any:any
 +
#  PermitLocalCommand no
 +
#  VisualHostKey no
 +
#  ProxyCommand ssh -q -W %h:%p gateway.example.com
 +
}}
  
推荐改变“Protocol”行成这样:
+
推荐将“Protocol”行改为:
 
  Protocol 2
 
  Protocol 2
  
 
这表示只有协议2将被用到,因为协议1 被认为不太安全。
 
这表示只有协议2将被用到,因为协议1 被认为不太安全。
  
当然这里也有一个文件是关于SSH的守护进程的,它就是“etc/ssh/sshd_config”,一般是这样的:
+
===守护进程===
 +
SSH客户端的配置文件是{{Filename|/etc/ssh/ssh'''d'''_config}}。
  
<pre>
+
以下是一个范例::
# $OpenBSD: sshd_config,v 1.75 2007/03/19 01:01:29 djm Exp $
+
 
 +
{{File|name=/etc/ssh/sshd_config|content=
 +
# $OpenBSD: sshd_config,v 1.82 2010/09/06 17:10:19 naddy Exp $
  
 
# This is the sshd server system-wide configuration file.  See
 
# This is the sshd server system-wide configuration file.  See
Line 92: Line 100:
  
 
#Port 22
 
#Port 22
#Protocol 2,1
+
#AddressFamily any
ListenAddress 0.0.0.0
+
#ListenAddress 0.0.0.0
 
#ListenAddress ::
 
#ListenAddress ::
 +
 +
# The default requires explicit activation of protocol 1
 +
#Protocol 2
  
 
# HostKey for protocol version 1
 
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh''host''key
+
#HostKey /etc/ssh/ssh_host_key
 
# HostKeys for protocol version 2
 
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh''host''rsa_key
+
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh''host''dsa_key
+
#HostKey /etc/ssh/ssh_host_dsa_key
 +
#HostKey /etc/ssh/ssh_host_ecdsa_key
  
 
# Lifetime and size of ephemeral version 1 server key
 
# Lifetime and size of ephemeral version 1 server key
 
#KeyRegenerationInterval 1h
 
#KeyRegenerationInterval 1h
#ServerKeyBits 768
+
#ServerKeyBits 1024
  
 
# Logging
 
# Logging
#obsoletes ~QuietMode and ~FascistLogging
+
# obsoletes QuietMode and FascistLogging
 
#SyslogFacility AUTH
 
#SyslogFacility AUTH
 
#LogLevel INFO
 
#LogLevel INFO
Line 117: Line 129:
 
#StrictModes yes
 
#StrictModes yes
 
#MaxAuthTries 6
 
#MaxAuthTries 6
 +
#MaxSessions 10
  
 
#RSAAuthentication yes
 
#RSAAuthentication yes
 
#PubkeyAuthentication yes
 
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys
+
#AuthorizedKeysFile .ssh/authorized_keys
  
# For this to work you will also need host keys in /etc/ssh/ssh''known''hosts
+
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
 
#RhostsRSAAuthentication no
 
#RhostsRSAAuthentication no
 
# similar for protocol version 2
 
# similar for protocol version 2
Line 137: Line 150:
  
 
# Change to no to disable s/key passwords
 
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
+
ChallengeResponseAuthentication no
  
 
# Kerberos options
 
# Kerberos options
Line 149: Line 162:
 
#GSSAPICleanupCredentials yes
 
#GSSAPICleanupCredentials yes
  
# Set this to 'yes' to enable PAM authentication, account processing,
+
# Set this to 'yes' to enable PAM authentication, account processing,  
# and session processing. If this is enabled, PAM authentication will
+
# and session processing. If this is enabled, PAM authentication will  
# be allowed through the ~ChallengeResponseAuthentication mechanism.
+
# be allowed through the ChallengeResponseAuthentication and
# Depending on your PAM configuration, this may bypass the setting of
+
# PasswordAuthentication.  Depending on your PAM configuration,
# PasswordAuthentication, ~PermitEmptyPasswords, and
+
# PAM authentication via ChallengeResponseAuthentication may bypass
# "PermitRootLogin without-password". If you just want the PAM account and
+
# the setting of "PermitRootLogin without-password".
# session checks to run without PAM authentication, then enable this but set
+
# If you just want the PAM account and session checks to run without
# ChallengeResponseAuthentication=no
+
# PAM authentication, then enable this but set PasswordAuthentication
#UsePAM no
+
# and ChallengeResponseAuthentication to 'no'.
 +
UsePAM yes
  
 +
#AllowAgentForwarding yes
 
#AllowTcpForwarding yes
 
#AllowTcpForwarding yes
 
#GatewayPorts no
 
#GatewayPorts no
Line 170: Line 185:
 
#UsePrivilegeSeparation yes
 
#UsePrivilegeSeparation yes
 
#PermitUserEnvironment no
 
#PermitUserEnvironment no
#Compression yes
+
#Compression delayed
 
#ClientAliveInterval 0
 
#ClientAliveInterval 0
 
#ClientAliveCountMax 3
 
#ClientAliveCountMax 3
Line 176: Line 191:
 
#PidFile /var/run/sshd.pid
 
#PidFile /var/run/sshd.pid
 
#MaxStartups 10
 
#MaxStartups 10
 +
#PermitTunnel no
 +
#ChrootDirectory none
  
 
# no default banner path
 
# no default banner path
#Banner /some/path
+
#Banner none
  
 
# override default of no subsystems
 
# override default of no subsystems
Subsystem       sftp   /usr/lib/ssh/sftp-server
+
Subsystem sftp /usr/lib/ssh/sftp-server
  
</pre>
+
# Example of overriding settings on a per-user basis
 +
#Match User anoncvs
 +
# X11Forwarding no
 +
# AllowTcpForwarding no
 +
# ForceCommand cvs server
 +
}}
  
只允许某些用户的话,加入这一行:
+
只允许某些用户访问的话,加入这一行:
 
  AllowUsers    user1 user2
 
  AllowUsers    user1 user2
  
也许你想改变一些行,使它们像下面这样:
+
要禁止通过SSH进行root用户登录,加入以下行:
<pre>
+
PermitRootLogin no
Protocol 2
+
 
.
+
你也可以取消BANNER选项的注释,然后编辑{{Filename|/etc/issue}}加入友好的欢迎信息内容。
.
+
 
.
+
{{Tip| 你可能想要把默认的端口从22改成其它更高的端口(参考 [http://en.wikipedia.org/wiki/Security_through_obscurity security through obscurity]).}}
LoginGraceTime 120
+
 
.
+
尽管ssh的运行端口可以被像nmap这样的端口扫描器侦测到,但改变它可以减少由于自动验证的尝试造成登录次数。
.
+
 
.
+
{{Tip| 完全取消密码登录方式也可以增强安全性,因为每个访问服务器的用户都需要创建ssh密钥。(参考 [http://wiki.archlinux.org/index.php/Using_SSH_Keys Using SSH Keys]).}}
PermitRootLogin no # (put yes here if you want root login)
+
</pre>
+
  
为了给人一个好的欢迎信息,你也可以去掉BANNER选项的注释和编辑“/etc/issue”。
+
{{File|name=/etc/ssh/sshd_config|content=
 +
PasswordAuthentication no
 +
ChallengeResponseAuthentication no}}
  
 
===允许其它主机进入===
 
===允许其它主机进入===
Line 222: Line 244:
 
</pre>
 
</pre>
  
现在检查你的“/etc/hosts.deny”文件,内容类似下面一行:
+
现在检查你的“/etc/hosts.deny”文件,找到并确保有类似下面一行的内容:
  ALL: ALL: DENY
+
  ALL: ALL
  
 
  你能SSH出去别人也应该能够SSH进来:)。
 
  你能SSH出去别人也应该能够SSH进来:)。
  
开始使用新的配置之前,要先重启守护进程:
+
开始使用新的配置之前,要先重启守护进程(以root身份):
  $ su -c '/etc/rc.d/sshd restart'
+
  # rc.d restart sshd
  
 
== 管理SSHD守护进程 ==
 
== 管理SSHD守护进程 ==

Revision as of 16:57, 19 July 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

介绍

Secure Shell或者SSH是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。加密技术保证了数据的保密性和完整性。如果有必要的话,SSH采用公匙加密技术来验证远程主机和允许远程主机验证用户?(SSH uses public-key cryptography to authenticate the remote computer and allow the remote computer to authenticate the user, if necessary.)

SSH

SSH通常用于远程访问和执行命令,但是它也支持tunneling,forwarding arbitrary TCP ports and X11 connections; 它还能够用SFTP或SCP协议来传递文件。

一个SSH服务器,默认地,在TCP端口22进行监听。一个SSH客户端程序通常被用来建立一个接受远程连接的sshd守护进程。这两者都以专利的,自由软件的以及开源版本的形式和不同的复杂性和完整性,被广泛地应用在现代的操作系统中,包括Mac OS X,Linux,Solaris和OpenVMS等。

OpenSSH

OpenSSH (OpenBSD Secure Shell) 是一套用ssh协议,通过电脑网络,提供加密通讯会话的电脑程序。它相对于SSH Communications Security公司拥有专利的Secure Shell软件套装,被创建为开源。OpenSSH是由Theo de Raadt领导的OpenBSD项目的一部分。

人们常把OpenSSH与相似的OpenSSL搞混,但是,这两个项目是由不同的团队开发出来的,有不同的用途,相似的名字只是由于相似的目标。

安装OpenSSH

pacman -S openssh

配置SSH

客户端

SSH客户端的配置文件是Template:Filename

以下是一个范例::

Template:File

推荐将“Protocol”行改为:

Protocol 2

这表示只有协议2将被用到,因为协议1 被认为不太安全。

守护进程

SSH客户端的配置文件是Template:Filename

以下是一个范例::

Template:File

只允许某些用户访问的话,加入这一行:

AllowUsers    user1 user2

要禁止通过SSH进行root用户登录,加入以下行:

PermitRootLogin no

你也可以取消BANNER选项的注释,然后编辑Template:Filename加入友好的欢迎信息内容。

Tip: 你可能想要把默认的端口从22改成其它更高的端口(参考 security through obscurity).

尽管ssh的运行端口可以被像nmap这样的端口扫描器侦测到,但改变它可以减少由于自动验证的尝试造成登录次数。

Tip: 完全取消密码登录方式也可以增强安全性,因为每个访问服务器的用户都需要创建ssh密钥。(参考 Using SSH Keys).

Template:File

允许其它主机进入

Template:Box Note

为了让其他人通过ssh登录到你的机器上,你必须要设置“/etc/hosts.allow”这个文件,加入类似下面的文字:

# 让每个人都能连接到你
sshd: ALL

# 或者限制只能特定的ip能够
sshd: 192.168.0.1

# 或者限制ip段
sshd: 10.0.0.0/255.255.255.0

# 或者限制为IP匹配
sshd: 192.168.1.

现在检查你的“/etc/hosts.deny”文件,找到并确保有类似下面一行的内容:

ALL: ALL
你能SSH出去别人也应该能够SSH进来:)。

开始使用新的配置之前,要先重启守护进程(以root身份):

# rc.d restart sshd

管理SSHD守护进程

只要把sshd加到/etc/rc.conf中的"DAEMONS" section部分:

DAEMONS=(... ... sshd ... ...)

开始/重启/停止这个daemon:

# /etc/rc.d/sshd {start|stop|restart}

连接到服务器

运行下面的命令:

$ ssh -p port user@server-address

小细节和小戏法

加密Socks通道

对于连接到各种不安全的无线网络上的笔记本电脑用户来说,这个是特别有用的!唯一所需要的就是一个一定程度上处于安全的地点的SSH服务器,比如在家里或办公室。用动态的DNS服务DynDNS也可能是很有用的,这样你就不必记住你的IP了。

第一步:开始连接

你只要在你喜欢的终端中执行这一个命令就能开始你的连接:

$ ssh -ND 4711 user@host

这里的“user”是你在“host”这台SSH服务器上运行的用户名。它会让你输入密码,然后你就能连上了。“N”表示不采用交互提示,而“D”表示指定监听的本地端口(你可以使用任何你喜欢的数字)

一个办法可以让这个过程更简单,那就是在~/.bashrc中加入这样一行:

alias sshtunnel="ssh -ND 4711 -v user@host"

加入冗长的“-v”标志更好,因为这样你可以验证是真的是从那个端口连接的。现在你只要执行命令“sshtunnel”就可以。 :)

第二步:配置你的浏览器(或其它程序)

如果你不配置你的web浏览器以便使用新创建的socks通道的话,上面的一步完全没用!

  • 对于Firefox: Edit -> Preferences -> Advanced -> Network -> Connection -> Setting:
检查"Manual proxy configuration" radio button?, 并且在"SOCKS host" 文本段输入"localhost" , 然后在接下来的一个文本框中输入你的端口数(上面我们用的是4711)。
确定你选择使用SOCKS4。这个程序对不会对SOCKS5起作用.
享受你的安全通道吧!

X11 Forwarding

为了通过SSH运行图形程序你必须使用X11 Forwarding。一个选项就是需要设置服务器和客户端的配置文件。

1.在服务器上安装xorg-xauth:

# pacman -S xorg-xauth

2.在服务器端修改 /etc/ssh/sshd_config 配置文件,将“X11Forwarding”这个选项去掉注释。

3.在客户端修改 /etc/ssh/ssh_config:

ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes

4.登录

ssh -X user@hostname

用SSHFS挂载远程文件系统

安装sshfs

# pacman -S sshfs

将你想要允许挂载SSH文件夹的用户添加到fuse组里

# gpasswd -a USER fuse

加载fuse模块(比如说在/etc/rc.conf中)

And then然后,在登录后,你就可以试着挂用sshfs载远程文件夹了:

# mkdir ~/remote_folder
# sshfs USER@remote_server:/tmp ~/remote_folder

上面的命令将把远程服务器上的/tmp文件夹挂载到本地的~/remote_folder目录下。复制任何文件到这个目录将使文件通过SCP通过网络传输。 Same concerns direct file editing, creating or removing.

当我们完成在远程文件夹下的工作,我们可以这样来卸载它:

# fusermount -u ~/remote_folder

如果我们需要经常在这个文件夹下,让它通过/etc/fstab挂载是一个明智的选择。这个办法可以让它在启动的时候挂载或者通过手动挂载(如果是noauto选项的话),而不需要每次都去挂载它。下面是一个简单的样本:

sshfs#USER@remote_server:/tmp /full/path/to/directory fuse    defaults,auto    0 0

链接和参考