https://wiki.archlinux.org/api.php?action=feedcontributions&user=0x79h&feedformat=atom
ArchWiki - User contributions [en]
2024-03-29T07:31:29Z
User contributions
MediaWiki 1.41.0
https://wiki.archlinux.org/index.php?title=NVIDIA_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=482197
NVIDIA (简体中文)
2017-07-17T18:39:46Z
<p>0x79h: /* 多台显示器 */</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Graphics (简体中文)]]<br />
[[Category:X server (简体中文)]]<br />
[[cs:NVIDIA]]<br />
[[de:Nvidia]]<br />
[[en:NVIDIA]]<br />
[[es:NVIDIA]]<br />
[[fa:اِنویدیا]]<br />
[[fr:Nvidia]]<br />
[[it:NVIDIA]]<br />
[[ja:NVIDIA]]<br />
[[nl:NVIDIA]]<br />
[[ru:NVIDIA]]<br />
[[tr:Nvidia]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Nouveau}}<br />
{{Related|Xorg (简体中文)}}<br />
{{Related articles end}}<br />
<br />
本文包含安装和配置 [http://www.nvidia.com NVIDIA] ''专有'' 显卡驱动的信息。想要了解开源驱动的信息,参见 [[Nouveau]].<br />
<br />
== 安装 ==<br />
<br />
该部分仅适用于 {{Pkg|linux}} 内核包,定制内核请[[#备用安装:定制内核|略过]]该小节。<br />
<br />
{{小贴士|您最好是使用ArchLinux的[[pacman (简体中文)|pacman]]来安装驱动,而不是直接到[http://www.nvidia.cn 英伟达官网]去下载驱动,因为这样会在更新系统时同时更新。}}<br />
<br />
1. 如果你不知道显卡情况,可运行以下命令获知:<br />
:{{bc|<nowiki>$ lspci -k | grep -A 2 -E "(VGA|3D)"</nowiki>}}<br />
<br />
2. 也从以下渠道可确定你的显卡型号以及下载相应的版本:<br />
:* 查找代号(如 NV50, NVC0等): [https://nouveau.freedesktop.org/wiki/CodeNames/ 英伟达代号查询页]<br />
:* 如果在上面的页面找不到你的型号的显卡,可到[http://www.nvidia.com/object/IO_32667.html 英伟达历史型号列表页]查找。<br />
:* 驱动下载: [http://www.nvidia.com/Download/index.aspx 英伟达驱动下载站]<br />
<br />
3. 为你的显卡安装和合适的驱动:<br />
:* GeForce 400 及以上版本安装 {{Pkg|nvidia}} 或者 {{Pkg|nvidia-lts}} 。<br />
{{注意|假如您是使用最新的显卡,如果以上两个驱动安装后都不能正常工作,您也许需要使用{{AUR|nvidia-beta}}和{{AUR|nvidia-utils-beta}},他们引入了一些新的特性。}}<br />
<br />
:* GeForce 8000/9000、ION 以及 100-300(NV5x, NV8x, NV9x and NVAx)等2006-2010的显卡型号,安装{{Pkg|nvidia-340xx}} 或者 {{Pkg|nvidia-340xx-lts}} 。<br />
<br />
:* FGeForce 6000/7000 (NV4x and NV6x)等2004-2006的显卡型号,安装{{Pkg|nvidia-304xx}} 或{{Pkg|nvidia-304xx-lts}} 。<br />
<br />
:* 更老的显卡型号参看 [[#Unsupported drivers]].<br />
<br />
{{注意|nvidia {-173xx,-96xx}-utils 包会跟 libgl 冲突,所以安装的时候,如果 pacman 询问您移除 libgl 并且因为依赖无法移除,您可以使用 {{ic|# pacman -Rdd libgl}} 移除 libgl。}}<br />
<br />
4. 在64位的操作系统上,假如您想32位的程序发挥好nvidia-utils的优势,还必须启用[[multilib]]源来安装lib32的包(例如{{Pkg|lib32-nvidia-utils}}, {{Pkg|lib32-nvidia-340xx-utils}} 或者 {{Pkg|lib32-nvidia-304xx-utils}})。<br />
<br />
5. '''重新启动您的计算机''', 以使得nouveau加入模块的黑名单生效。 <br />
<br />
一旦驱动安装完毕,就可以进入下一步了:[[#配置|配置英伟达驱动]]。<br />
<br />
===备用安装:定制内核===<br />
在此之前,您最好了解一下Arch的打包系统(the Arch Build System)的工作原理:<br />
* 这里是一篇[[Arch Build System (简体中文)]]的介绍<br />
* 还有[[makepkg (简体中文)]]<br />
* 还有[[Creating packages (简体中文)]]<br />
<br />
{{注意|在[[AUR]]上有一个叫{{AUR|nvidia-all}}{{Broken package link|{{aur-mirror|nvidia-all}}}}的软件包可以帮助您更方便地安装英伟达的专有驱动,它适合于定制内核或者多内核。}}<br />
<br />
下面的这篇短小精悍的教程将教您怎样使用[[ABS]]来定制您的驱动。<br />
<br />
安装ABS和生成目录树:<br />
# pacman -S abs<br />
# abs<br />
作为一个标准的ArchLinux用户,请为新的软件包创建一个临时目录:<br />
$ mkdir -p ~/devel/abs<br />
为英伟达的驱动包创建一个拷贝:<br />
$ cp -r /var/abs/extra/nvidia/ ~/devel/abs/<br />
下面,可以进入英伟达驱动的工程目录了:<br />
$ cd ~/devel/abs/nvidia<br />
您可以编辑一下一些文件{{ic|nvidia.install}}和{{ic|PKGBUILD}}以便它们包含的正确的内核版本变量。<br />
<br />
在运行定制内核的时候,可以用下面的方式得到相应的内核和本地版本的名称:<br />
$ uname -r<br />
# In nvidia.install, replace the {{ic|EXTRAMODULES<nowiki>=</nowiki>'extramodules-3.4-ARCH'}} variable with the custom kernel version, such as {{ic|EXTRAMODULES<nowiki>=</nowiki>'extramodules-3.4.4'}} or {{ic|EXTRAMODULES<nowiki>=</nowiki>'extramodules-3.4.4-custom'}} depending on what the kernel's version is and the local version's text/numbers. Do this for all instances of the version number within this file.<br />
# In PKGBUILD, change the {{ic|_extramodules<nowiki>=</nowiki>extramodules-3.4-ARCH}} variable to match the appropriate version, as above.<br />
# If there are more than one kernels in the system installed in parallel (such as a custom kernel alongside the default -ARCH kernel), change the {{ic|pkgname<nowiki>=</nowiki>nvidia}} variable in the PKGBUILD to a unique identifier, such as nvidia-344 or nvidia-custom. This will allow both kernels to use the nvidia module, since the custom nvidia module has a different package name and will not overwrite the original. You will also need to comment the line in {{ic|package()}} that blacklists the nvidia module in {{ic|/usr/lib/modprobe.d/nvidia.conf}} (no need to do it again).<br />
<br />
跟着:<br />
$ makepkg -ci<br />
参数{{ic|-c}}告诉makepkg构建完英伟达驱动后清理一些文件, 而参数{{ic|-i}}告诉makepkg自动运行pacman来安装构建后的软件包。<br />
<br />
==配置==<br />
安装完驱动之后,您需要创建Xorg的配置文件。您可以运行一次[[Xorg#Running|测试]]来检验没有配置文件Xorg能否正确运行。但是,您可能需要创建配置文件{{ic|/etc/X11/xorg.conf}}来调整Xorg运行时的一些变量。您可以用nvidia-xconfig配置工具来生成这些文件,也可以手动创建。假如您是手动创建的话,它可以是一个最小的配置文件(也就是意味着它仅仅把一些基础的选项传给[[Xorg]]服务器),或者包含[[Xorg#Configuration|一些自定义的配置]]来绕开Xorg的自动发现或者是预配置的选项。<br />
<br />
===自动配置===<br />
英伟达的软件包已经包含一个自动配置的工具来帮助您创建Xorg的配置文件({{ic|xorg.conf}})您可以通过运行下面的命令来实现自动配置:<br />
# nvidia-xconfig<br />
<br />
当Xorg的配置文件{{ic|xorg.conf}}不存在时,这条命令会自动检测您的硬件,并创建文件{{ic|/etc/X11/xorg.conf}}。假如配置文件已经存在的话,它会进行一些编辑,以方便在Xorg运行时能成功载入英伟达的专有驱动。<br />
<br />
假如您想载入DRI(Direct Rendering Infrastructure),确定已经把您的配置文件修改为:<br />
# Load "dri"<br />
再一次检查您的配置文件{{ic|/etc/X11/xorg.conf}}中的默认色深,水平同步,垂直刷新和分辨率是否正确,不正确的配置可能会损害您的硬件,请仔细进行检查。<br />
<br />
{{警告| 可能在Xorg-server 1.8下仍旧不能正常工作}}<br />
<br />
===最小配置模式===<br />
用根用户创建一个基本的配置文件{{ic|/etc/X11/xorg.conf}}:<br />
# vi /etc/X11/xorg.conf<br />
<br />
把英伟达的驱动添加到配置文件里面去:<br />
<pre><br />
Section "Device"<br />
Identifier "Device0"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
EndSection<br />
</pre><br />
<br />
{{小贴士|假如您已经预先安装了开源驱动nouveau,请确定已经从{{ic|/etc/mkinitcpio.conf}}里面去除"nouveau"。您也可以通过使用[[#在nvidia和nouveau之间切换|这些脚本]]来在开源和闭源驱动之间进行切换。}}<br />
<br />
<br />
===多台显示器===<br />
<br />
修改 {{ic|/etc/X11/xorg.conf.d/10-monitor.conf}} 即可启用多显示器支持.<br />
<br />
给每一个物理显示器添加 Monitor, Device 和 Screen ,然后添加一个 ServerLayout 来管理他们.<br />
<br />
若启用了 Xinerama ,Nvidia专用驱动则会自动禁用多显示器的画面拼接. 若想启用拼接,请注释"{{ic|ServerLayout}}"中的{{ic|Xinerama}},并且启用TwinView. <br />
<br />
{{hc|/etc/X11/xorg.conf.d/10-monitor.conf|<br />
Section "ServerLayout"<br />
Identifier "DualSreen"<br />
Screen 0 "Screen0"<br />
Screen 1 "Screen1" RightOf "Screen0" #Screen1 在 Screen0 的右边<br />
Option "Xinerama" "1" #在屏幕之间移动窗口<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
Option "Enable" "true"<br />
EndSection<br />
<br />
Section "Monitor"<br />
Identifier "Monitor1"<br />
Option "Enable" "true"<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device0"<br />
Driver "nvidia"<br />
Screen 0<br />
EndSection<br />
<br />
Section "Device"<br />
Identifier "Device1"<br />
Driver "nvidia"<br />
Screen 1<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Device0"<br />
Monitor "Monitor0"<br />
DefaultDepth 24<br />
Option "TwinView" "0"<br />
SubSection "Display"<br />
Depth 24<br />
Modes "1280x800_75.00"<br />
EndSubSection<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen1"<br />
Device "Device1"<br />
Monitor "Monitor1"<br />
DefaultDepth 24<br />
Option "TwinView" "0"<br />
SubSection "Display"<br />
Depth 24<br />
EndSubSection<br />
EndSection<br />
}}<br />
<br />
==== TwinView ====<br />
若你想用一个大屏幕,而卜是两个屏幕.将{{ic|TwinView}}设为{{ic|1}}.<br />
<br />
如果想要拼接应该使用此方法而不是上面的Xinerama<br />
Option "TwinView" "1"<br />
<br />
====使用 NVIDIA Settings====<br />
你也可以使用由软件包{{Pkg|nvidia-utils}}提供的{{ic|nvidia-settings}}工具. 通过这个方法你可以使用NVIDIA公司随驱动程序提供的受限软件. 只需要以root权限运行命令{{ic|nvidia-settings}}就可以自由设置驱动,你的设置将会被保存到文件{{ic|/etc/X11/xorg.conf.d/10-monitor.conf}}中.<br />
<br />
==调整==<br />
<br />
===图形用户界面:nvidia-settings===<br />
英伟达的驱动包提供了一个{{ic|nvidia-settings}}的程序来给您调整一些额外的选项。<br />
<br />
假如您想在登录时载入设置,请在终端输入:<br />
$ nvidia-settings --load-config-only<br />
<br />
或者添加到您的桌面环境的启动应用程序里面。<br />
<br />
For a dramatic 2D graphics performance increase in pixmap-intensive applications, e.g. Firefox, set the {{ic|InitialPixmapPlacement}} parameter to 2:<br />
<br />
$ nvidia-settings -a InitialPixmapPlacement=2<br />
<br />
This is documented in [http://cgit.freedesktop.org/~aplattner/nvidia-settings/tree/src/libXNVCtrl/NVCtrl.h?id=b27db3d10d58b821e87fbe3f46166e02dc589855#n2797 nvidia-settings source code]. For this setting to persist, this command needs to be run on every startup or added to your {{ic|~/.nvidia-settings-rc}}.<br />
<br />
{{小贴士| 在极少数情况下{{ic|~/.nvidia-settings-rc}}可能会出现问题。若真如此,Xorg服务器可能会崩溃,并且需要删除这个文件来解决问题。 }}<br />
<br />
* 请到[http://us.download.nvidia.com/XFree86/Linux-x86_64/256.53/README/index.html NVIDIA Accelerated Linux Graphics Driver README and Installation Guide]查看一些额外的细节和选项。<br />
<br />
====启用桌面组合====<br />
从180.44版本开始,英伟达的驱动默认使用 Damage 和 Composite X 扩展支持 GLX。请参阅 [[Composite]] 了解一些详细的说明。<br />
<br />
====关闭启动时的Logo====<br />
添加{{ic|"NoLogo"}}选项到{{ic|Device}}节里:<br />
Option "NoLogo" "1"<br />
<br />
====启用硬件加速====<br />
{{注意|从97.46.xx版本开始RenderAccel就已经被默认启用。}}<br />
添加{{ic|"RenderAccel"}}选项在{{ic|Device}}节下面:<br />
Option "RenderAccel" "1"<br />
<br />
====覆盖显示器检测====<br />
{{ic|Device}}节下面的{{ic|"ConnectedMonitor"}}选项允许您重载X服务器在启动时的显示器检测选项,它可以在启动的时候节约您大量的宝贵时间。有用的选项是:{{ic|"CRT"}}是用于CRT显示器,{{ic|"DFP"}}是用于数字显示器,{{ic|"TV"}}是用于电视的。<br />
<br />
下面的例子是强制英伟达的驱动绕开启动检测并且强制把显示器识别为DFP:<br />
Option "ConnectedMonitor" "DFP"<br />
{{注意| "CRT"适用于所有模拟的15pin的VGA连接器,甚至是平板显示器。"DFP"仅仅适合于DVI数字连接器。}}<br />
<br />
====启用三重缓存====<br />
您可以在{{ic|Device}}节下面添加{{ic|"TripleBuffer"}}选项来启用三重缓存:<br />
Option "TripleBuffer" "1"<br />
<br />
假如您的显卡有充足的显存(128MB或者更多)的话,建议您启用该选项。这个只有在垂直同步(nvidia-settings中的一个特性)启用的时候才会生效。<br />
<br />
{{注意|此选项可能会引致全屏花屏和降低性能。}}<br />
<br />
====使用系统级事件====<br />
这是来自英伟达驱动的[http://http.download.nvidia.com/XFree86/Linux-x86/1.0-7182/README/readme.txt README]文件: ''"[...] 使用系统级事件,可以在当某个客户端进行直接渲染到组合窗口的时候,可以有效地通知X。"'' 它可以帮助您提高性能,但是它如今还不能完全支持SLI和多GPU模式。<br />
<br />
在{{ic|Device}}节下添加:<br />
Option "DamageEvents" "1"<br />
{{注意|在较新的驱动程序版本中,此选项是默认启用的。}}<br />
<br />
====启用省电功能====<br />
在{{ic|Monitor}}节下添加:<br />
Option "DPMS" "1"<br />
<br />
====启用亮度控制====<br />
在{{ic|Device}}节下添加:<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
<br />
====启用SLI====<br />
{{警告|截至2011年5月7日,你可能会遇到SLI在GNOME 3下会遇到视频性能低迷的情况。}}<br />
<br />
根据英伟达驱动的[http://http.download.nvidia.com/XFree86/Linux-x86/1.0-8774/README/appendix-d.html README] 附录: ''这个选项可以在支持的配置中控制 SLI 渲染的配置。''一个''支持的配置''适用于有一块SLI认证的主板以及2或者3个SLI认证的GPU的计算机。在[http://www.slizone.com/page/home.html SLI Zone]上面有更加详细的信息。<br />
<br />
您可以用{{ic|lspci}}查找第一个GPU的PCI总线ID:<br />
$ lspci | grep VGA<br />
<br />
跟着会返回类似的信息:<br />
03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)<br />
05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)<br />
<br />
在{{ic|Device}}节下添加BusID(3个先前例子):<br />
BusID "PCI:3:0:0"<br />
<br />
{{注意|这个格式很重要。BusID的值必须指定为{{ic|"PCI:<BusID>:0:0"}}的格式}}<br />
<br />
根据需要的SLI渲染模式来添加值到{{ic|Screen}}节下面:<br />
Option "SLI" "SLIAA"<br />
<br />
下表列出了可用的渲染模式。<br />
<br />
{| border="1"<br />
! Value !! Behavior<br />
|-<br />
| 0, no, off, false, Single || 渲染时仅使用单GPU。<br />
|-<br />
| 1, yes, on, true, Auto || 启用SLI并让驱动自动选择合适的渲染模式。<br />
|-<br />
| AFR || 启用SLI并使用交替帧渲染模式。<br />
|-<br />
| SFR || 启用SLI并使用的分割帧渲染模式。<br />
|-<br />
| SLIAA || 启用SLI和使用SLI抗锯齿。使用全场景反锯齿结合,以改善视觉效果。<br />
|}<br />
<br />
另外,您可以使用{{ic|nvidia-xconfig}}实用工具的命令行参数来插入这些改变到{{ic|xorg.conf}}:<br />
# nvidia-xconfig --busid=PCI:3:0:0 --sli=SLIAA<br />
<br />
从shell来验证一下SLI是否被启动:<br />
$ nvidia-settings -q all | grep SLIMode<br />
Attribute 'SLIMode' (arch:0.0): AA <br />
'SLIMode' is a string attribute.<br />
'SLIMode' is a read-only attribute.<br />
'SLIMode' can use the following target types: X Screen.<br />
<br />
====强制Powermizer性能水平(适用于笔记本)====<br />
在{{ic|Device}}节下添加:<br />
# 强制Powermizer任何时间都在在特定级别<br />
# level 0x1=highest<br />
# level 0x2=med<br />
# level 0x3=lowest<br />
<br />
# 交流电源设置:<br />
Option "RegistryDwords" "PowerMizerLevelAC=0x3"<br />
# 电池设置:<br />
Option "RegistryDwords" "PowerMizerLevel=0x3"<br />
或许[http://tutanhamon.com.ua/technovodstvo/NVIDIA-UNIX-driver/ NVIDIA Driver for X.org:Performance and Power Saving Hints]这篇文章可以更好地解释这些设置。<br />
<br />
=====让GPU根据温度来设置自己的性能水平=====<br />
在{{ic|Device}}节下添加:<br />
Option "RegistryDwords" "PerfLevelSrc=0x3333"<br />
<br />
====禁用vblank中断(适用于笔记本)====<br />
当运行中断检测的实用工具{{ic|powertop}},<br />
When running the interrupt detection utility {{ic|powertop}},它可以观察到英伟达驱动将会为每个vblank产生一个中断。在{{ic|Device}}节下放置以下选项来禁用:<br />
Option "OnDemandVBlankInterrupts" "1"<br />
这将减少约一或两个每秒的中断。<br />
<br />
====启用超频====<br />
{{警告|'''请注意,超频可能会严重地损害您的硬件,所以在启用之前您必须要三思而后行。'''}}<br />
<br />
您可以在{{ic|Device}}节里添加下面的选项来启用超频:<br />
Option "Coolbits" "1"<br />
<br />
这将会在X会话上启动超频:<br />
$ nvidia-settings<br />
{{注意|GTX 4xx/5xx系列的Fermi核心没办法使用Coolbits的方式来超频。另一种方法是在DOS下编辑和刷新BIOS来实现(当然,这是最好的方法),或者在Win32环境下使用[http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,127/orderby,2/page,1/ nvflash]和[http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,135/orderby,2/page,1/ NiBiTor 6.0]来实现。通过更新BIOS,不仅可以提高电压限制,同时稳定地提高软件超频。<br />
<br />
=====设置静态的2D/3D时钟=====<br />
在{{ic|Device}}节里面添加以下字串来启用PowerMizer的最大性能级别: <br />
Option "RegistryDwords" "PerfLevelSrc=0x2222"<br />
在{{ic|Device}}节里面设置一下字串的其中一个来通过{{ic|nvidia-settings}}来手动控制GPU风扇: <br />
Option "Coolbits" "4"<br />
<br />
Option "Coolbits" "5"<br />
<br />
====通过XRandR启用屏幕旋转====<br />
把下面的行添加到{{ic|Device}}节里面:<br />
Option "RandRRotation" "True"<br />
重新启动Xorg后可以用旋转屏幕:<br />
$ xrandr -o left<br />
可以用下面的方法恢复默认:<br />
$ xrandr -o normal<br />
{{注意| 可能您不需要编辑{{ic|xorg.conf}}来启用屏幕旋转,因为它已经被默认被启用来。最好是使用各自桌面环境的工具,例如KDE的系统设置工具。}}<br />
<br />
==提示和技巧==<br />
===启用 Pure Video HD 高清视频解码(VDPAU/VAAPI)===<br />
'''硬件需求:''' <br />
<br />
至少是一块第二代的PureVideo HD[[wikipedia:PureVideo_HD#Table_of_PureVideo_.28HD.29_GPUs]]<br />
<br />
'''软件需求:'''<br />
<br />
安装英伟达显卡的专有驱动将会根据不同PureVideo的显卡来提供到VDPAU的接口来提供视频解码能力。<br />
<br />
您也可以通过下面的方式来添加VA-API的支持:<br />
# pacman -S vdpau-video<br />
<br />
您可以通过下面的方式来验证VA-API是否被当前系统所支持:<br />
$ vainfo<br />
<br />
假如您想充分发挥您的显卡的硬件解码能力的话,您可能需要一个支持VDPAU或者VA-API的媒体播放器。<br />
<br />
假如您想启用 [[MPlayer (简体中文)|MPlayer]] 的硬件加速能力的话,您可以编辑{{ic|~/.mplayer/config}}<br />
<br />
vo=vdpau<br />
vc=ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffodivxvdpau,<br />
<br />
启用[[VLC]]的硬件加速能力可以使用下面的方法:<br />
<br />
工具 -> 首选项 -> 输入和解码器 -> 检查“使用GPU加速(实验性的)”<br />
<br />
启用'''smplayer'''的硬件加速能力可以使用下面的方法:<br />
<br />
选项 -> 首选项 -> 常规 -> 视频 标签页 -> 选择vdpau作为输出设备<br />
<br />
启用'''gnome-mplayer'''的硬件加速能力可以使用下面的方法:<br />
<br />
编辑 -> 首选项 -> 设置vdpau为视频输出<br />
<br />
'''在低显存下播放高清电影:'''<br />
<br />
假如您的显卡没有太多的显存(>521MB?),当您播放1080p甚至是720p可看到锯齿。<br />
您可以使用TWM或者MWM之类的窗口管理器来避免这些问题。<br />
<br />
此外可以配置{{ic|~/.mplayer/config}}增加 MPlayer 的缓存大小。<br />
<br />
===使用电视输出===<br />
下面的文章将指导您去实现[http://en.wikibooks.org/wiki/NVidia/TV-OUT 电视输出]<br />
<br />
===使用一台电视(DFP)作为X的唯一输出===<br />
假如CRT-0上面的备用显示器没有被自动检测,这可能是使用DVI作为主要输出的一个问题,或许是X启动时电视被关闭或者是还没有被连接到计算机上。<br />
<br />
强制英伟达使用DFP,把一个EDID的拷贝储存在文件系统上,好让X可以解释文件,而不是从TV/DFP上面读EDID。<br />
<br />
运行nvidia-settings来获得EDID,它会用树格式来显示一些信息,并会忽略余下的设置和选择的GPU(相应条目应该为"GPU-0"或者类似的选项),点击"DFP"节(再提醒一下,是"DFP-0"或者类似的选项),点击"获取 Edid"按钮来储存,例如{{ic|/etc/X11/dfp0.edid}}。<br />
<br />
在xorg.conf的"Device"节添加:<br />
Option "ConnectedMonitor" "DFP"<br />
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid"<br />
选项{{ic|ConnectedMonitor}}会强制驱动调整连接的DFP。选项{{ic|CustomEDID}}会提供EDID数据给设备,这将意味着连接到TV/DFP的设备会被在X的进程中启动。<br />
<br />
通过这种方法,可以在启动时自动启动一个登录管理器并且通过开机进程来启动电视,并且正确配置屏幕。<br />
<br />
===检查电源状态===<br />
英伟达的Xorg驱动可以检测电源。可以检查'GPUPowerSource'这个只读参数来实现(0 - 交流电源,1 - 电池):<br />
<br />
$ nvidia-settings -q GPUPowerSource -t<br />
1<br />
<br />
为了能够实现检测,您需要预先安装[[acpid]],并且把它添加到rc.conf的DAEMONS里面,否则系统日志会出现警告:<br />
ACPI: failed to connect to the ACPI event daemon; the daemon<br />
may not be running or the "AcpidSocketPath" X<br />
configuration option may not be set correctly. When the<br />
ACPI event daemon is available, the NVIDIA X driver will<br />
try to use it to receive ACPI event notifications. For<br />
details, please see the "ConnectToAcpid" and<br />
"AcpidSocketPath" X configuration options in Appendix B: X<br />
Config Options in the README.<br />
<br />
===在shell显示GPU温度===<br />
====途径一 - nvidia-settings====<br />
{{注意|您必须要用X才能使用该途径。如果你没有X,使用途径二或途径三。还要注意途径三目前对于较新的显卡(例如 G210/220)以及嵌入式 GPUs (如 Zotac IONITX's 8800GS) 不工作,}}<br />
<br />
您可以用下面的方法让nvidia-settings在shell下面显示GPU温度:<br />
$ nvidia-settings -q gpucoretemp<br />
<br />
这将输出类似下面的信息:<br />
Attribute 'GPUCoreTemp' (hostname:0.0): 41.<br />
'GPUCoreTemp' is an integer attribute.<br />
'GPUCoreTemp' is a read-only attribute.<br />
'GPUCoreTemp' can use the following target types: X Screen, GPU.<br />
<br />
The GPU temps of this board is 41 C.<br />
<br />
您可以使用rrdtool或者conky其它的实用工具来输出GPU的温度。<br />
$ nvidia-settings -q gpucoretemp -t<br />
41<br />
<br />
====途径二 - nvidia-smi====<br />
<br />
使用nvidia-smi可以直接获取GPU的温度,而不需要使用X。这对于一部分没有运行X的用户很有用,也许是因为这些机器无显示器而运行着服务器软件。<br />
<br />
您可以使用下面的方法来使用nvidia-smi让shell输出GPU温度:<br />
$ nvidia-smi<br />
<br />
将会输出类似下面的信息:<br />
{{bc|<nowiki>$ nvidia-smi<br />
Fri Jan 6 18:53:54 2012 <br />
+------------------------------------------------------+ <br />
| NVIDIA-SMI 2.290.10 Driver Version: 290.10 | <br />
|-------------------------------+----------------------+----------------------+<br />
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |<br />
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |<br />
|===============================+======================+======================|<br />
| 0. GeForce 8500 GT | 0000:01:00.0 N/A | N/A N/A |<br />
| 30% 62 C N/A N/A / N/A | 17% 42MB / 255MB | N/A Default |<br />
|-------------------------------+----------------------+----------------------|<br />
| Compute processes: GPU Memory |<br />
| GPU PID Process name Usage |<br />
|=============================================================================|<br />
| 0. ERROR: Not Supported |<br />
+-----------------------------------------------------------------------------+<br />
</nowiki>}}<br />
<br />
仅输出温度:<br />
{{bc|<nowiki><br />
$ nvidia-smi -q -d TEMPERATURE<br />
<br />
==============NVSMI LOG==============<br />
<br />
Timestamp : Fri Jan 6 18:50:57 2012<br />
<br />
Driver Version : 290.10<br />
<br />
Attached GPUs : 1<br />
<br />
GPU 0000:01:00.0<br />
Temperature<br />
Gpu : 62 C<br />
<br />
</nowiki>}}<br />
<br />
您可以使用rrdtool或者conky其它的实用工具来输出GPU的温度。<br />
<br />
$ nvidia-smi -q -d TEMPERATURE | grep Gpu | cut -c35-36<br />
<br />
62<br />
<br />
参考: http://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli<br />
<br />
====途径三 - nvclock====<br />
nvclock可以从[extra]的软件源中得到。注意nvclock无法访问G210/220或者更新的热传感器。<br />
<br />
nvclock获取的温度跟nvidia-settings/nv-control获取的温度会有明显的差异。根据[http://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 这里],一篇来自nvclock的名叫thunderbird的作者提到,nvclock的数值或许更加准确。<br />
<br />
===登陆时设置风扇速度===<br />
您可以使用{{ic|nvidia-settings}}的命令行借口来调整。首先确定您的Xorg的配置文件的{{ic|Device}}节是否已经把Coolbits设置为4或者5.<br />
<br />
Option "Coolbits" "4"<br />
<br />
{{注意|GTX 4xx/5xx系列的显卡目前还不能在用这种方法设置登录的风扇速度。该途径仅仅允许在当前的X会话的nvidia-settings设置风扇转速。}}<br />
<br />
在您的[[xinitrc|{{ic|~/.xinitrc}}]]文件放置下面的行来调整运行Xorg下的风扇。把<n>替换为您要设置的风扇转速百分比。<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=<n>"<br />
<br />
您还可以用递增的方法来配置第二个GPU:<br />
<br />
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" \ <br />
-a "[gpu:1]/GPUFanControlState=1" \<br />
-a "[fan:0]/GPUCurrentFanSpeed=<n>" \<br />
-a [fan:1]/GPUCurrentFanSpeed=<n>" &<br />
<br />
假如您使用GDM或者KDM之类的登录管理器,您可以创建一个桌面的入口文件来处理这个设定。创建{{ic|~/.config/autostart/nvidia-fan-speed.desktop}}并且把这些文本放置到里面。'''把<n>替换为您要设置的风扇转速百分比。'''<br />
<br />
[Desktop Entry]<br />
Type=Application<br />
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=<n>"<br />
X-GNOME-Autostart-enabled=true<br />
Name=nvidia-fan-speed<br />
<br />
===改变驱动程序的安装/反安装顺序===<br />
在这里,旧的英伟达驱动被定义为nvidiaO,而新的英伟达驱动则被定义为nvidiaN。<br />
移除 nvidiaO<br />
安装 nvidia-libglN<br />
安装 nvidiaN<br />
安装 lib32-nvidia-libgl-N (假如有必要的话)<br />
<br />
===在nvidia和nouveau之间切换===<br />
假如您经常在nvidia和nouveau两个驱动之间切换,您可以使用这两个脚本来让您的工作更加简单有效:<br />
<br />
#!/bin/bash<br />
# nvidia -> nouveau<br />
<br />
/usr/bin/sudo /bin/sed -i 's/#options nouveau modeset=1/options nouveau modeset=1/' /etc/modprobe.d/modprobe.conf<br />
/usr/bin/sudo /bin/sed -i 's/#MODULES="nouveau"/MODULES="nouveau"/' /etc/mkinitcpio.conf<br />
<br />
/usr/bin/sudo /usr/bin/pacman -Rdds --noconfirm nvidia-173xx{,-utils}<br />
/usr/bin/sudo /usr/bin/pacman -S --noconfirm nouveau-dri xf86-video-nouveau<br />
<br />
#/usr/bin/sudo /bin/cp {10-monitor,30-nouveau}.conf /etc/X11/xorg.conf.d/<br />
<br />
/usr/bin/sudo /sbin/mkinitcpio -p linux<br />
<br />
#!/bin/bash<br />
# nouveau -> nvidia<br />
<br />
/usr/bin/sudo /bin/sed -i 's/options nouveau modeset=1/#options nouveau modeset=1/' /etc/modprobe.d/modprobe.conf<br />
/usr/bin/sudo /bin/sed -i 's/MODULES="nouveau"/#MODULES="nouveau"/' /etc/mkinitcpio.conf<br />
<br />
/usr/bin/sudo /usr/bin/pacman -Rdds --noconfirm nouveau-dri xf86-video-nouveau libgl<br />
/usr/bin/sudo /usr/bin/pacman -S --noconfirm nvidia-173xx{,-utils}<br />
<br />
#/usr/bin/sudo /bin/rm /etc/X11/xorg.conf.d/{10-monitor,30-nouveau}.conf<br />
<br />
/usr/bin/sudo /sbin/mkinitcpio -p linux<br />
<br />
'''想要成功地完成切换,一次重启是很有必要的。'''<br />
请根据您正在使用的驱动版本来修改一些地方(在这里我使用的是nvidia-173xx)<br />
<br />
假如您正在使用的xorg-server的版本低于1.10.2-1,取消注释行,复制和删除{10-monitor,30-nouveau}.conf。自从1.10.2-1之后的版本,xorg-server修补为自动加载nouveau。我保留了10-monitor.conf和[[Nouveau#Configuration|30-nouveau.conf]]{{Broken section link}}在同一个目录作为这个脚本,必要时还要调整一下路径。<br />
<br />
==故障排除==<br />
<br />
===游戏中使用双头显示输出===<br />
当您使用全屏进行游戏的时候,您会发现游戏会把两个屏幕识别为一个大屏幕。虽然这在技术上是正确的(虚拟出来的大屏幕是您的几个屏幕的组合),您可能不需要在两个屏幕上同时玩游戏。<br />
您可以在SDL上改变这些行为,试一下:<br />
export SDL_VIDEO_FULLSCREEN_HEAD=1<br />
<br />
在OpenGL里面,添加适当的Metamodes到您的xorg.conf的{{ic|Device}}节下面,然后重启X:<br />
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"<br />
<br />
另一种方法,可单独工作或连同上面提到的那些是[[Gaming#Starting_games_in_a_separate_X_server|在单独的X服务器里面开始游戏]].<br />
<br />
===旧的Xorg的设置===<br />
如果您是从旧的版本升级过来的,请移除旧的{{ic|/usr/X11R6}},防止在安装过程中引发问题。<br />
<br />
===屏幕损坏:"六屏"问题===<br />
一些使用Geforce GT 100M系列显卡的用户,屏幕会在X启动的时候转为损坏;分为六个限制为640x480的区域。<br />
<br />
为了解决这个问题,可以在{{ic|Device}}节里启动验证模式{{ic|NoTotalSizeCheck}}:<br />
Section "Device"<br />
...<br />
Option "ModeValidation" "NoTotalSizeCheck"<br />
...<br />
EndSection<br />
<br />
==='/dev/nvidia0' Input/Output error===<br />
这个错误可以是由几个不同的原因引发,此错误最常见的解决方案是检查组/文件权限,这也许不能说是一个问题。在英伟达的文档里面并没有详细地告诉您如何解决这个问题但还有一些东西对一些人有用。这个问题可以是IRQ与其它驱动冲突或者是错误的路由,甚至是内核或者BIOS的问题。<br />
<br />
首先您得尝试移除视频采集卡或者其它视频设备来解决问题。如果在同一系统中有太多的视频处理器,可能由于视频控制器的内存分配问题导致内核无法启动。特别是显存比较低的系统可能发生这种情况,即使只有一个视频处理器。你应该找出你的系统的显存(例如运行''lspci -v'')并分配参数传递到内核:<br />
vmalloc=64M<br />
或者<br />
vmalloc=256M<br />
<br />
另一种方法是尝试的是从“操作控制系统”改变你的BIOS IRQ路由“BIOS控制”或其他方式。第一个可以通过内核参数:<br />
PCI=biosirq<br />
<br />
''noacpi''的内核参数也可以作为一个建议,但是因为它完全禁用ACPI的,应谨慎使用,毕竟一些硬件很容易因过热损坏。<br />
<br />
{{注意|您可以在内核的命令行或者在启动管理器的配置文件上传输参数。您可以到你的启动管理器的Wiki页面上面了解更详细的信息。}}<br />
<br />
==='/dev/nvidiactl' errors===<br />
启动一个OpenGL的应用程序可能会引致以下的错误:<br />
Error: Could not open /dev/nvidiactl because the permissions are too<br />
restrictive. Please see the {{ic|FREQUENTLY ASKED QUESTIONS}} <br />
section of {{ic|/usr/share/doc/NVIDIA_GLX-1.0/README}} <br />
for steps to correct.<br />
<br />
您可以把适当的用户添加到"video"组并重新登录来解决这个问题:<br />
# gpasswd -a username video<br />
<br />
===32位应用程序无法启动===<br />
在64位系统下,安装{{ic|lib32-nvidia-libgl}}对应相同版本的64位驱动可以修复这个问题。<br />
<br />
===更新内核之后的错误===<br />
使用自定义构建的NVIDIA模块来替代[extra]里面的软件包,每次内核更新后驱动都需要重新编译。一般建议更新内核和图形驱动程序后重新启动。<br />
<br />
===通常奔溃的问题===<br />
* 尝试在xorg.conf里面关闭{{ic|RenderAccel}}。<br />
* 假如Xorg输出一些错误如"conflicting memory type"或者"failed to allocate primary buffer: out of memory",在{{ic|/boot/grub/menu.lst}}添加{{ic|nopat}}到{{ic|kernel}}行的末尾。<br />
<br />
* 如果NVIDIA编译器提示当前版本的gcc和用于编译的内核的版本号不同,请在{{ic|/etc/profile}}里面添加:<br />
export IGNORE_CC_MISMATCH=1<br />
* 假如Xorg使用nvidia-96xx驱动时由于"Signal 11"奔溃,尝试禁用PAT。把参数{{ic|nopat}}传输到{{ic|menu.lst}}的{{ic|kernel}}行。<br />
您可以在[http://www.nvnews.net/vbulletin/forumdisplay.php?s=&forumid=14 NVIDIA forums.]找到更多的关于故障排除的信息。<br />
<br />
===安装新版本的驱动后性能很糟糕===<br />
假如和旧版本的驱动相比,FPS有下降,首先检查是否打开直接渲染:<br />
$ glxinfo | grep direct<br />
假如输出:<br />
direct rendering: No <br />
跟着FPS可能会突然下降。<br />
<br />
一种可能的解决方案是降级您的驱动为先前的版本并重新启动。<br />
<br />
===400系列显卡与CPU峰值===<br />
如果您遇到间歇性的CPU峰值与400系列显卡的问题,这可能是PowerMizer不断变化的GPU的时钟频率引起。选择PowerMizer自适应性能的设置,请把一下内容添加到您的Xorg的配置文件的Device节里面:<br />
<br />
Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"<br />
<br />
===X在登入/注销时挂起,用Ctrl+Alt+Backspace来实现===<br />
假如在使用传统的英伟达驱动启用Xorg的登入/注销时挂起,但登录仍然可以通过Ctrl-Alt-Backspace,尝试添加下面的行到{{ic|/etc/modprobe.d/modprobe.conf}}:<br />
options nvidia NVreg_Mobile=1<br />
<br />
一些用户可能很幸运地实现,但其他用户反而实现性能下降:<br />
options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=33 NVreg_DeviceFileMode=0660 NVreg_SoftEDIDs=0 NVreg_Mobile=1<br />
<br />
注意{{ic|NVreg_Mobile}}需要根据您的笔记本来修改:<br />
* 1 适用于Dell笔记本.<br />
* 2 适用于non-Compal Toshiba 笔记本.<br />
* 3 适用于其它笔记本.<br />
* 4 适用于Compal Toshiba笔记本.<br />
* 5 适用于Gateway笔记本.<br />
在[http://http.download.nvidia.com/XFree86/Linux-x86/1.0-7182/README/readme.txt NVIDIA Driver's Readme:Appendix K]可以看到更多的信息。<br />
<br />
===XRandR检测的刷新率不正确依赖实用工具===<br />
XRandR的X扩展目前还不能识别到一个X屏幕上的多个显示设备;它仅仅可以看到{{ic|MetaMode}}的边界框,XRandR将无法区分它们。<br />
为了支持动态双头输出,NVIDIA的驱动程序必须使每个MetaMode是唯一的,目前,NVIDIA的驱动程序来通过使用一个唯一的标识符刷新率完成。<br />
XRandR扩展目前正在由Xorg社区进行了重新设计,所以刷新率的解决方法可能在未来的某个节点上删除。<br />
<br />
此可用的办法也被禁用的“DynamicTwinView”X配置选项设置为“false”,这将禁用NV-CONTROL支持操纵MetaModes,但会造成XRandR和XF86VidMode可见刷新率要准确。<br />
<br />
===No screens found on a laptop / Nvidia Optimus===<br />
假如在一些笔记本上英伟达的驱动找不到任何屏幕,您可以用下面的方法实现:<br />
lspci | grep VGA<br />
将会输出类似的信息:<br />
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)<br />
01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)<br />
<br />
不幸的是,英伟达已经没有计划在他们的Linux驱动程序支持。<br />
<br />
您需要安装[[Intel]]的驱动来处理屏幕,让3D软件使用,您需要通过[[Bumblebee]]告诉他们使用英伟达的显卡。 <br />
<br />
===没有笔记本电脑上的亮度控制===<br />
尝试在20-nvidia.conf添加下面的行:<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
<br />
如果X无法启动,尝试改为下边的样子:<br />
<br />
Section "Device"<br />
Identifier "Device0"<br />
Driver "nvidia"<br />
VendorName "NVIDIA Corporation"<br />
BoardName "Quadro NVS 3100M"<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
EndSection<br />
<br />
<br />
假如它仍旧不能工作的话,您可以尝试安装{{AUR|nvidia-bl}}。<br />
<br />
==一些额外的链接==<br />
* [http://www.nvnews.net/vbulletin/forumdisplay.php?s=&forumid=14 NVIDIA forums]<br />
* [http://http.download.nvidia.com/XFree86/Linux-x86/1.0-7182/README/readme.txt Official readme for NVIDIA drivers]</div>
0x79h
https://wiki.archlinux.org/index.php?title=Google_Authenticator_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=481388
Google Authenticator (简体中文)
2017-07-06T03:01:57Z
<p>0x79h: 谷歌两步验证</p>
<hr />
<div>[[Category:Secure Shell (简体中文)]]<br />
[[en:Google Authenticator]]<br />
[[es:Google Authenticator]]<br />
[[ja:Google Authenticator]]<br />
[[ru:Google Authenticator]]<br />
{{TranslationStatus (简体中文)|Google_Authenticator|2017-04-26|475188}}<br />
[https://github.com/google/google-authenticator Google Authenticator] 使用一次性密码('''O'''ne-'''t'''ime '''P'''asscodes)来进行两步验证. OTP生成器应用可运行在 iOS, Android甚至 Blackberry。与 [[S/KEY Authentication]] 类似,两步验证将集成在Linux的 [[PAM]] 系统中。此指南显示了此两步验证的安装与配置。<br />
<br />
==安装==<br />
<br />
安装来自 [[AUR]] 的 {{AUR|libpam-google-authenticator}} 软件包。开发者版本 {{AUR|google-authenticator-libpam-git}}。<br />
<br />
==设置插入式验证模块('''P'''luggable '''A'''uthentication '''M'''odules)==<br />
<br />
{{Warning|若通过SSH进行Google Authenticator的所有配置,在完成所有配置并测试正常之前,请勿关闭SSH会话,否则可能会无法登录。此外,最好在激活PAM之前生成密钥文件。}}<br />
<br />
通常远程登录才需要设置两步验证。PAM的配置是在文件{{ic|/etc/pam.d/sshd}}内。如果想全局使用谷歌两步身份验证,请'''小心'''的修改{{ic|/etc/pam.d/sshd}},以免锁定自己从而不能登录。在本指南中,我们将在本地会话中安全的编辑文件{{ic|/etc/pam.d/sshd}}。<br />
<br />
<br />
要同时输入 Unix 密码'''与'''两步验证码登录,请在 {{ic|/etc/pam.d/sshd}}文件的system-remote-login行之上添加{{ic|pam_google_authenticator.so}}:<br />
<br />
'''auth required pam_google_authenticator.so'''<br />
auth include system-remote-login<br />
account include system-remote-login<br />
password include system-remote-login<br />
session include system-remote-login<br />
<br />
<br />
这样将会首先询问两步验证码,验证成功后才会询问 Unix 密码。改变上述添加于{{ic|/etc/pam.d/sshd}}文件的配置顺序则会改变验证顺序。<br />
<br />
{{Warning|只有生成密钥文件(见下)的用户才会被允许SSH登录}}<br />
<br />
要允许使用 Unix 密码'''或'''两步验证码登录,请修改:<br />
<br />
auth '''sufficient''' pam_google_authenticator.so<br />
<br />
在文件{{ic|/etc/ssh/'''sshd_config'''}}内开启质疑-应答认证(challenge-response authentication):<br />
ChallengeResponseAuthentication yes<br />
最后 重启 {{ic|sshd}}服务<br />
<br />
{{Warning|如果设置使用密钥登陆并禁止密码登录,OpenSSH 会忽略如上所有的配置。但是在 OpenSSh 6.2 版本以后,允许使用基于密钥和两步验证的验证。请参阅 [[Secure Shell#Two-factor authentication and public keys]] }}<br />
<br />
==生成密钥文件==<br />
{{Tip|安装 {{Pkg|qrencode}} 以生成二维码. 扫描二维码以自动配置两步验证器.}}<br />
<br />
每一个想要使用两步验证的用户需要在其用户目录生成一个密钥文件,使用命令''google-authenticator''来完成:<br />
<br />
$ google-authenticator<br />
Do you want authentication tokens to be time-based (y/n) y<br />
<这里是自动生成的二维码><br />
Your new secret key is: ZVZG5UZU4D7MY4DH (密钥)<br />
Your verification code is 269371 (验证码)<br />
Your emergency scratch codes are: (备用令牌码)<br />
70058954<br />
97277505<br />
99684896<br />
56514332<br />
82717798<br />
<br />
Do you want me to update your "/home/username/.google_authenticator" file (y/n) y<br />
<br />
Do you want to disallow multiple uses of the same authentication<br />
token? This restricts you to one login about every 30s, but it increases<br />
your chances to notice or even prevent man-in-the-middle attacks (y/n) y<br />
(是否拒绝多次使用使用相同的令牌?这将限制你每30s仅能登录一次,但会提醒/阻止中间人攻击。)<br />
<br />
By default, tokens are good for 30 seconds and in order to compensate for<br />
possible time-skew between the client and the server, we allow an extra<br />
token before and after the current time. If you experience problems with poor<br />
time synchronization, you can increase the window from its default<br />
size of 1:30min to about 4min. Do you want to do so (y/n) n<br />
(是否将窗口时间由1分30秒增加到约4分钟?这将缓解时间同步问题。)<br />
<br />
If the computer that you are logging into is not hardened against brute-force<br />
login attempts, you can enable rate-limiting for the authentication module.<br />
By default, this limits attackers to no more than 3 login attempts every 30s.<br />
Do you want to enable rate-limiting (y/n) y<br />
(是否启用此模块的登录频率限制,登录者将会被限制为最多在30秒内登录3次。)<br />
<br />
<br />
建议您将'''备用令牌码'''保存在安全的地方,因为当丢失手机或其他原因不能使用两步验证器时,只能使用'''备用令牌码'''登录。它们同时也被保存在{{ic|~/.google_authenticator}}。<br />
<br />
<br />
==设置两步验证软件==<br />
从谷歌市场安装两步验证器[http://m.google.com/authenticator Android market](如[https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp FreeOTP]),或者安装[https://f-droid.org/repository/browse/?fdfilter=google&fdid=com.google.android.apps.authenticator2 F-Droid]。在软件中创建一个新验证,输入密钥(如例子中的'ZVZG5UZU4D7MY4DH')或扫描二维码来导入密钥,并输入验证码。<br />
<br />
软件现在应该会显示一个每30秒更新的验证码。<br />
<br />
==测试==<br />
连接SSH服务器:<br />
<br />
$ ssh hostname<br />
login as: <username><br />
Verification code: <令牌码/备用令牌码><br />
Password: <password><br />
$<br />
<br />
==存储位置==<br />
如果想要改变密钥存储位置,请使用{{ic|--secret}}参数:<br />
<br />
$ google-authenticator --secret="/'''PATH_FOLDER'''/'''USERNAME'''"<br />
<br />
然后更改{{ic|/etc/pam.d/sshd}}内的路径配置:<br />
<br />
{{hc|/etc/pam.d/sshd|2=<br />
auth required pam_google_authenticator.so user=root secret=/'''PATH_FOLDER'''/${USER}<br />
}}<br />
<br />
{{ic|user&#61;root}} 用于强制PAM使用root用户权限来搜索文件。<br />
<br />
另外请注意,密钥文件的所有者是root,生成文件的用户只能读取文件(chmod: {{ic|400}})。<br />
<br />
$ chown root.root /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
chmod 400 /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
<br />
==用于桌面登陆==<br />
谷歌两步认证插件可以同时用于控制台与GNOME桌面登录。只需要在文件 {{ic|/etc/pam.d/login}} 或 {{ic|/etc/pam.d/gdm-password}} 内加入<br />
<br />
auth required pam_google_authenticator.so</div>
0x79h
https://wiki.archlinux.org/index.php?title=OpenSSH_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=481387
OpenSSH (简体中文)
2017-07-06T01:13:39Z
<p>0x79h: 初步修改</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Secure Shell (简体中文)]]<br />
[[ar:Secure Shell]]<br />
[[de:SSH]]<br />
[[en:Secure Shell]]<br />
[[es:Secure Shell]]<br />
[[fa:SSH]]<br />
[[fr:ssh]]<br />
[[it:Secure Shell]]<br />
[[ja:Secure Shell]]<br />
[[ko:Secure Shell]]<br />
[[pl:Secure Shell]]<br />
[[pt:Secure Shell]]<br />
[[ru:Secure Shell]]<br />
[[sr:Secure Shell]]<br />
{{Archive}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|SSH keys}}<br />
{{Related|Pam abl}}<br />
{{Related|fail2ban}}<br />
{{Related|sshguard}}<br />
{{Related|Sshfs}}<br />
{{Related|Syslog-ng}}<br />
{{Related|SFTP chroot}}<br />
{{Related articles end}}<br />
'''Secure Shell''' ('''SSH''') 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。<br />
<br />
SSH 通常用于远程访问和执行命令,但是它也支持隧道,转发任意 TCP 端口以及 X11 连接;它还能够用 SFTP 或 SCP 协议来传输文件。<br />
<br />
一个 SSH 服务器默认情况下,在 TCP 端口 22 进行监听。一个 SSH 客户端程序通常被用来建立一个远程连接到 '''sshd''' 守护进程。这两者都被广泛地存在于现代操作系统中,包括 Mac OS X,GNU/Linux,Solaris 和 OpenVMS 等。以专利的,自由软件的以及开源版本的形式和不同的复杂性和完整性存在。<br />
<br />
(来源:[[Wikipedia:Secure Shell|维基百科 Secure Shell]])<br />
<br />
== OpenSSH ==<br />
<br />
OpenSSH (OpenBSD Secure Shell) 是一套使用ssh协议,通过计算机网络,提供加密通讯会话的计算机程序。它被创建为 SSH Communications Security 公司拥有专利的 Secure Shell 软件套装的一个开源替代。OpenSSH是由Theo de Raadt领导的OpenBSD项目的一部分。 <br />
<br />
人们常把 OpenSSH 与相似名字的 OpenSSL 搞混,但是,这两个项目是由不同的团队出于不同的目的开发出来的。相似的名字只是由于相似的目标。<br />
<br />
=== 安装OpenSSH ===<br />
从[[官方源]]中[[安装]] {{pkg|openssh}}.<br />
<br />
<br />
===SSH客户端===<br />
<br />
连接SSH服务器,运行命令<br />
$ssh -p port user@server-address<br />
<br />
如果服务器仅允许使用密钥登录,请参考 [[SSH keys (简体中文)|SSH Keys]] 。<br />
<br />
<br />
==== 配置 SSH ====<br />
SSH客户端的配置文件是{{ic|/etc/ssh/```ssh```_config}} 或 {{ic|~/.ssh/config}}.<br />
<br />
现在已经不需要额外设置 {{ic|Protocol 2}}, 默认的协议已经是 {{ic|Protocol 2}} 了 (http://www.openssh.org/txt/release-5.4) 。<br />
<br />
{{hc|~/.ssh/config|# global options<br />
User ''user''<br />
<br />
# host-specific options<br />
Host myserver<br />
HostName ''server-address''<br />
Port ''port''}}<br />
<br />
进行了如上的配置后,以下命令是等效的<br />
$ ssh -p ''port'' ''user''@''server-address''<br />
$ ssh myserver<br />
<br />
查看 {{man|5|ssh_config}} 获取更多信息。<br />
<br />
某些选项没有命令行参数,但是可以使用 {{ic|-o}} 在命令行中配置指定选项的参数。<br />
例如 {{ic|1=-o```KexAlgorithms```=+```diffie-hellman-group1-sha1```}}.<br />
<br />
===SSH服务端===<br />
====配置 SSH守护进程====<br />
{{小贴士|<br />
*更多安全配置请参考 [[SSH keys (简体中文)|SSH Keys]] <br />
}}<br />
<br />
SSH 守护进程的配置文件是{{ic|/etc/ssh/```sshd```_config}}。<br />
<br />
只允许某些用户访问的话,加入这一行:<br />
AllowUsers user1 user2<br />
<br />
只允许一些组访问:<br />
AllowGroups group1 group2<br />
<br />
要禁止通过SSH进行root用户登录,加入以下行:<br />
PermitRootLogin no<br />
<br />
运行以下命令以更改sshd服务监听端口:<br />
Port 39901<br />
<br />
{{小贴士|<br />
* 可以考虑把默认的端口从22改成更高的端口(参考 [[wikipedia:Security_through_obscurity|security through obscurity]]).尽管ssh的运行端口可以被像nmap这样的端口扫描器侦测到,但改变它可以减少由于自动验证的尝试造成的登录日志条目。有关端口号列表请参考{{ic|/etc//services}}或[[Wikipedia:List of TCP and UDP port numbers|list of TCP and UDP port numbers]]<br />
* 完全取消密码登录方式可以极大的增强安全性,(参考 [[SSH keys (简体中文)|SSH Keys]]).<br />
}}<br />
<br />
你也可以取消BANNER选项的注释,然后编辑{{ic|/etc/issue}}加入友好的欢迎信息内容。<br />
<br />
你也可以运行以下命令关联文件(如{{ic|/etc/issue}}文件)到登录欢迎信息:<br />
Banner /etc/issue<br />
<br />
ssh主机秘钥将由sshd服务文件自动配置。如果你想要自定义秘钥,运行以下命令以自定义秘钥:<br />
HostKey /etc/ssh/ssh_host_rsa_key<br />
<br />
<br />
<br />
==== 管理 sshd 守护进程 ====<br />
你可以使用下面的命令启动sshd:<br />
# systemctl start sshd<br />
<br />
你可以使用下面的命令开机启动sshd:<br />
# systemctl enable sshd.service<br />
<br />
{{警告|Systemd 是一个异步启动的进程。如果你绑定 SSH 守护进程到某个特定的 IP 地址 {{ic|ListenAddress 192.168.1.100}},它可能会在引导时启动失败,因为默认的 sshd.service 单元文件没有对网络接口启动的依赖。当绑定到一个 IP 地址时,你需要添加 {{ic|After&#61;network.target}} 到自定义的 sshd.service 单元文件中。参见 [[Systemd#Replacing provided unit files]]{{Broken section link}}.}}<br />
<br />
或者你可以启用SSH Daemon socket,这样当第一次传入连接时启动守护进程:<br />
# systemctl enable sshd.socket<br />
如果你使用非默认端口22,你必须在文件(/lib/systemd/system/sshd.socket)中设置"ListenStream"为相应的端口。<br />
<br />
<br />
{{Pkg|openssh}} comes with two kinds of [[systemd]] service files:<br />
#{{ic|sshd.service}}, which will keep the SSH daemon permanently active and fork for each incoming connection.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh#n16] It is especially suitable for systems with a large amount of SSH traffic.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh&id=4cadf5dff444e4b7265f8918652f4e6dff733812#n15] <br />
#{{ic|sshd.socket}} + {{ic|sshd@.service}}, which spawn on-demand instances of the SSH daemon per connection. Using it implies that ''systemd'' listens on the SSH socket and will only start the daemon process for an incoming connection. It is the recommended way to run {{ic|sshd}} in almost all cases.[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/sshd.service?h=packages/openssh&id=4cadf5dff444e4b7265f8918652f4e6dff733812#n18][http://lists.freedesktop.org/archives/systemd-devel/2011-January/001107.html][http://0pointer.de/blog/projects/inetd.html]<br />
<br />
You can [[start]] and [[enable]] either {{ic|sshd.service}} '''or''' {{ic|sshd.socket}} to begin using the daemon.<br />
<br />
If using the socket service, you will need to [[edit]] the unit file if you want it to listen on a port other than the default 22:<br />
<br />
{{hc|# systemctl edit sshd.socket|<nowiki><br />
[Socket]<br />
ListenStream=<br />
ListenStream=12345<br />
</nowiki>}}<br />
<br />
{{Warning|Using {{ic|sshd.socket}} negates the {{ic|ListenAddress}} setting, so it will allow connections over any address. To achieve the effect of setting {{ic|ListenAddress}}, you must specify the port ''and'' IP for {{ic|ListenStream}} (e.g. {{ic|1=ListenStream=192.168.1.100:22}}). You must also add {{ic|1=FreeBind=true}} under {{ic|[Socket]}} or else setting the IP address will have the same drawback as setting {{ic|ListenAddress}}: the socket will fail to start if the network is not up in time.}}<br />
<br />
{{Tip|When using socket activation neither {{ic|sshd.socket}} nor the daemon's regular {{ic|sshd.service}} allow to monitor connection attempts in the log, but executing {{ic|# journalctl /usr/bin/sshd}} does.}}<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 加密Socks通道 ===<br />
对于连接到各种不安全的无线网络上的笔记本电脑用户来说,这个是特别有用的!唯一所需要的就是一个一定程度上处于安全的地点的SSH服务器,比如在家里或办公室。用动态的DNS服务[http://www.dyndns.org/ DynDNS]也可能是很有用的,这样你就不必记住你的IP了。<br />
<br />
==== 第一步:开始连接 ====<br />
你只要在你喜欢的终端中执行这一个命令就能开始你的连接:<br />
$ ssh -ND 4711 user@host<br />
这里的“user”是你在“host”这台SSH服务器上运行的用户名。它会让你输入密码,然后你就能连上了。“N”表示不采用交互提示,而“D”表示指定监听的本地端口(你可以使用任何你喜欢的数字)<br />
<br />
一个办法可以让这个过程更简单,那就是在~/.bashrc中加入这样一行:<br />
alias sshtunnel="ssh -ND 4711 -v user@host"<br />
加入冗长的“-v”标志更好,因为这样你可以验证是真的是从那个端口连接的。现在你只要执行命令“sshtunnel”就可以。 :)<br />
<br />
==== 第二步:配置你的浏览器(或其它程序) ====<br />
<br />
如果你不配置你的web浏览器以便使用新创建的socks通道的话,上面的一步完全没用!<br />
<br />
* 对于Firefox: ''Edit -> Preferences -> Advanced -> Network -> Connection -> Setting'':<br />
:检查"Manual proxy configuration" radio button?, 并且在"SOCKS host" 文本段输入"localhost" , 然后在接下来的一个文本框中输入你的端口数(上面我们用的是4711)。<br />
<br />
:确定你选择使用SOCKS4。这个程序对不会对SOCKS5起作用.<br />
<br />
:享受你的安全通道吧!<br />
<br />
=== X11 转发 ===<br />
<br />
为了通过SSH运行图形程序你必须使用X11 Forwarding。一个选项就是需要设置服务器和客户端的配置文件(这里所说的“客户端”指运行你的X11服务器的电脑,而你的X应用程序运行在“服务器”上)。<br />
<br />
在服务器上安装xorg-xauth:<br />
# pacman -S xorg-xauth<br />
<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''AllowTcpForwarding'''选项。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''X11Forwarding'''选项。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}将'''X11DisplayOffset'''选项设为10。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''X11UseLocalhost'''选项。<br />
同时:<br />
* 在'''客户端'''上,编辑{{ic|ssh_config}}启用'''ForwardX11'''选项。<br />
<br />
当GUI大量绘制时,请启用'''ForwardX11Trusted'''。<br />
<br />
为了使用X11 forwarding,首先通过SSH登陆到你的服务器:<br />
$ ssh -X -p port user@server-address<br />
如果你在运行图形应用程序时收到了一些错误,请尝试可信的X11 forwarding:<br />
$ ssh -Y -p port user@server-address<br />
你现在可以在远程服务器上启用任何的X程序,输出将会被转发到你的本地会话中:<br />
$ xclock<br />
<br />
如果你遇到了“Cannot open display”错误,请尝试使用非root账户执行下述命令:<br />
$ xhost +<br />
<br />
上述命令将会允许任何用户转发X11应用程序。为了限制只能转发到特定主机:<br />
$ xhost +hostname<br />
<br />
上述命令中的hostname是你想要转发到的主机名。使用“man xhost”获取更多信息。<br />
<br />
值得注意的是,一些应用程序会检查本地正在运行的实例。Firefox就是一个例子。你可以关闭正在执行的Firefox,或者使用下述启动参数来在本地启动一个远程实例:<br />
$ firefox -no-remote<br />
<br />
=== 转发其他端口 ===<br />
除了SSH内建的对X11的支持之外,它也能通过本地转发和远程转发,来为任何的TCP连接建立隧道。<br />
<br />
本地转发时,会在本机打开一个端口,连接将被转发到一个远程主机,并给定一个目的地。很多时候,转发目的地和远程主机会相同,因此也提供了一条SSH命令来建立一个安全的VNC连接。本地转发可以通过{{Ic|-L}}来设置,后面可以指定一个地址及端口{{Ic|<tunnel port>:<destination address>:<destination port>}}。<br />
如下:<br />
<br />
$ ssh -L 1000:mail.google.com:25 192.168.0.100<br />
<br />
以上指令将会通过SSH得到一个在192.168.0.100的shell,同时也会创建一个从本机1000端口到mai.google.com上的25端口的隧道。建立之后,localhost:1000会通过192.168.0.100连接到Gmail的SMTP端口。任何从192.168.0.100到mail.google.com:25的连接(即使不必要)都会以这样的方式建立,并且,在本机和192.168.0.100之间的数据传递都是安全的,除非你采取了别的手段。<br />
同样:<br />
<br />
$ ssh -L 2000:192.168.0.100:6001 192.168.0.100<br />
$ ssh -L 2000:localhost:6001 192.168.0.100<br />
<br />
以上指令会将到localhost:2000的连接直接转发到远程主机192.168.0.100的6001端口。对于使用VNC服务器(tightvns包的一部分)建立的VNC连接来说,以上的例子尽管很有效,但是安全性有待商榷。<br />
<br />
远程转发允许任何远程主机通过SSH隧道连接到本机,提供了和本地转发相反的功能,突破了防火墙的限制。通过{{Ic|-R}}参数,以及{{Ic|<tunnel port>:<destination address>:<destination>}}能够实现远程转发。<br />
<br />
如下:<br />
<br />
$ ssh -R 3000:irc.freenode.net:6667 192.168.0.200<br />
<br />
将会在192.168.0.200上得到一个shell,同时也会创建一个从192.168.0.200上的3000端口到irc.freenode.net上的6667端口的隧道。建立之后,192.168.0.200:3000会通过本机连接到freenode的IRC端口。到192.168.0.200的3000端口的连接将会通过隧道发送到本机然后转发到irc.freenode.net的6667端口。因此,在这个例子中,在远程主机上IRC程序能够被使用,即使端口6667被阻止。<br />
<br />
本地转发{{Ic|-L}}和远程转发{{Ic|-R}}都可以提供一个安全的"网关",允许其他计算机无需使用SSH或者SSH daemon来使用ssh隧道。例如 {{Ic|<tunnel address>:<tunnel port>:<destination address>:<destination port>}}.<br />
{{Ic|<tunnel address>}}可以是作为网关的机器上的任何地址,例如 {{Ic|localhost}}(仅允许本地访问),{{Ic|192.168.0.100}}(仅允许通过192.168.0.100访问), {{Ic|*}}(允许所有地址访问)。<br />
{{Ic|<tunnel address>}}若留空则默认设置为{{Ic|localhost}},本地转发{{Ic|-L}}不需要额外的设置,而远程转发{{Ic|-R}}需要配置SSH daemon设置,请参阅{{Ic|sshd_config(5)}}中的{{Ic|GatewayPorts}}。<br />
<br />
=== 加速SSH ===<br />
为了加速连续的到同一台主机的连接,你可以在远程主机的{{ic|/etc/ssh/ssh_config}}中增加以下内容:<br />
ControlMaster auto<br />
ControlPath ~/.ssh/socket-%r@%h:%p<br />
改变SSH的计算来减少cpu使用能够提高速度。关于这一点,最好的选择是arcfour和blowfish-cbc。<br />
'''除非你清楚你在做什么,否则不要做; arcfour有大量众所周知的缺点'''。 通过增加参数{{Ic|"c"}}:<br />
$ ssh -c arcfour,blowfish-cbc user@server-address<br />
为了持续地使用这个,可以在{{ic|/etc/ssh/ssh_config}}中增加以下内容:<br />
Ciphers arcfour,blowfish-cbc<br />
其他能够加速的选项是{{Ic|"C"}}参数,同样,以下将是长久的解决方案:<br />
Compression yes<br />
登陆时间可以通过{{Ic|"4"}}来减少,它是通过IPv6旁路进行寻路。同上:<br />
AddressFamily inet<br />
或者在{{ic|~/.bashrc}}中增加以下内容也能够达到长久的效果(前提是你使用bash):<br />
alias ssh='ssh -C4c arcfour,blowfish-cbc'<br />
<br />
==== 问题解决 ====<br />
确定你的“DISPLAY”变量在远程主机上能被解析:<br />
<br />
$ ssh -X user@server-address<br />
server $ echo $DISPLAY<br />
localhost:10.0<br />
server $ telnet localhost 6010<br />
localhost/6010: lookup failure: Temporary failure in name resolution <br />
<br />
这个问题能通过添加localhost到 {{ic|/etc/hosts}}来解决。<br />
<br />
=== 用SSHFS挂载远程文件系统 ===<br />
<br />
安装sshfs<br />
# pacman -S sshfs<br />
<br />
将你想要允许挂载SSH文件夹的用户添加到fuse组里<br />
<br />
# gpasswd -a USER fuse<br />
<br />
加载fuse模块(比如说在/etc/rc.conf中)<br />
<br />
And then然后,在登录后,你就可以试着挂用sshfs载远程文件夹了:<br />
# mkdir ~/remote_folder<br />
# sshfs USER@remote_server:/tmp ~/remote_folder<br />
<br />
上面的命令将把远程服务器上的/tmp文件夹挂载到本地的~/remote_folder目录下。复制任何文件到这个目录将使文件通过SCP通过网络传输。<br />
Same concerns direct file editing, creating or removing.<br />
<br />
当我们完成在远程文件夹下的工作,我们可以这样来卸载它:<br />
# fusermount -u ~/remote_folder<br />
<br />
如果我们需要经常在这个文件夹下,让它通过/etc/fstab挂载是一个明智的选择。这个办法可以让它在启动的时候挂载或者通过手动挂载(如果是noauto选项的话),而不需要每次都去挂载它。下面是一个简单的样本: <br />
sshfs#USER@remote_server:/tmp /full/path/to/directory fuse defaults,auto 0 0<br />
=== 保持在线 ===<br />
如果你的会话空闲,它会自动登出。为了保持会话, 可以把以下内容增加到客户端的{{ic|~/.ssh/config}}或者{{ic|/etc/ssh/ssh_config}}。<br />
<br />
ServerAliveInterval 120<br />
<br />
这将会使得客户端每120秒发送一个“alive”的信号到服务器。<br />
<br />
反过来,为了保持到达本地的会话,你可以设置:<br />
<br />
ClientAliveInterval 120<br />
<br />
(或者其他任何大于0的数字)在服务器的{{ic|/etc/ssh/sshd_config}}。<br />
<br />
===在配置文件中保存连接信息 ===<br />
通常当你想登录到一台远程主机的时候,你至少需要输入主机名和IP地址。为了减少这个重复劳动,你可以使用本地的{{ic|$HOME/.ssh/config}} 或者全局的{{ic|/etc/ssh/ssh_config}}:<br />
<br />
{{hc|$HOME/.ssh/config|<br />
Host myserver<br />
HostName 123.123.123.123<br />
Port 12345<br />
User bob<br />
Host other_server<br />
HostName test.something.org<br />
User alice<br />
CheckHostIP no<br />
Cipher blowfish<br />
}}<br />
<br />
现在你能用指定的名称来简单地连接到远程主机:<br />
<br />
$ ssh myserver<br />
<br />
如果需要查看完整选项,可以查看你的系统上的ssh_config文档, 或者它的官方网站[http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config ssh_config documentation]。<br />
<br />
=== 更改ssh主机prompt ===<br />
区别你的电脑和远程主机是很有必要的,特别是它们的prompt相同时。只要把一下内容插入到你的bashrc文件即可达到这个效果。<br />
<br />
{{hc|$HOME/.bashrc|2=<br />
if [ -n "$SSH_CLIENT" ]; then<br />
PS1='\[\e[0;33m\]\u@\h:\wSSH$\[\e[m\] '<br />
else<br />
PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\ e[m\] '<br />
fi<br />
}}<br />
<br />
可以访问[[Color Bash Prompt]]了解更多关于PS1变量定制的更多信息。<br />
<br />
=== 当sshd服务器宕机时自动登出所有客户端 ===<br />
为了在sshd服务器宕机(比如重启或关机)时自动登出所有客户端,需要在sshd服务器的/etc/rc.local.shutdown 增加以下内容:<br />
<br />
who | cut -d " " -f1 | uniq | xargs pkill -KILL -u<br />
<br />
这防止了ssh客户端在超时之后挂起,最终得到这样的结果:<br />
<br />
Write failed: Broken pipe<br />
<br />
== 问题解决 ==<br />
=== 拒绝连接或者超时问题 ===<br />
==== SSH服务是否开启并且正在监听吗? ====<br />
$ ssh -tnlp<br />
<br />
如果以上的命令没有显示SSH端口是打开的,那么说明SSH服务没有启动。查看{{ic|/var/log/messages}}来寻找错误信息。<br />
<br />
==== 是否是防火墙阻止了连接? ====<br />
更新你的防火墙规则来排除干扰:<br />
<br />
# rc.d stop iptables<br />
<br />
或者:<br />
<br />
# iptables -P INPUT ACCEPT<br />
# iptables -P OUTPUT ACCEPT<br />
# iptables -F INPUT<br />
# iptables -F OUTPUT<br />
<br />
==== 你的电脑和目的主机之间是否连接? ====<br />
测试你的电脑和目的主机的连接情况:<br />
<br />
# tcpdump -lnn -i any port ssh and tcp-syn<br />
<br />
它会显示一些基本信息,然后等待数据交换。现在尝试你的连接。如果没有输出,就可能是你的电脑网络阻塞了。(也许是防火墙问题,也许是NAT路由的问题,祝你好运!)<br />
<br />
==== Read from socket failed: Connection reset by peer ====<br />
最近版本的openssh有时候会因为以上信息崩溃,据说是elliptic curve 加密的bug。在这种情况下,请编辑这个文件:<br />
<br />
~/.ssh/config<br />
<br />
如果不存在,就创建它,然后加入以下内容:<br />
HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss<br />
<br />
在openssh5.9中,以上的修复工作不会奏效。不过,还可以这样做:<br />
<br />
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc <br />
MACs hmac-md5,hmac-sha1,hmac-ripemd160<br />
<br />
可以访问[http://www.gossamer-threads.com/lists/openssh/dev/51339 discussion]来查看openssh的bug问题.<br />
<br />
=== "[your shell]: No such file or directory" / ssh认证问题 ===<br />
<br />
对于这个问题,一个可能的原因是需要SSH客户端在{{Ic|$SHELL}}中提供绝对路径(例如可以通过{{Ic|whereis -b [your shell]}}得到),即使你的shell在{{Ic|$PATH}}中。另一个原因也可能是,用户不是''network''组的成员。<br />
<br />
== See Also ==<br />
*[[SSH keys]]<br />
*[[Pam abl]]<br />
*[[fail2ban]]<br />
*[[sshguard]]<br />
*[[Sshfs]]<br />
*[http://www.soloport.com/iptables.html A Cure for the Common SSH Login Attack]<br />
*[[使用SSH密钥]]<br />
*[http://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]<br />
*[http://www.ibm.com/developerworks/library/l-keyc/index.html OpenSSH key management, Part 1] and [http://www.ibm.com/developerworks/library/l-keyc2 Part 2] on IBM developerWorks</div>
0x79h
https://wiki.archlinux.org/index.php?title=OpenSSH_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=481337
OpenSSH (简体中文)
2017-07-05T03:28:03Z
<p>0x79h: /* 转发其他端口 */</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Secure Shell (简体中文)]]<br />
[[ar:Secure Shell]]<br />
[[de:SSH]]<br />
[[en:Secure Shell]]<br />
[[es:Secure Shell]]<br />
[[fa:SSH]]<br />
[[fr:ssh]]<br />
[[it:Secure Shell]]<br />
[[ja:Secure Shell]]<br />
[[ko:Secure Shell]]<br />
[[pl:Secure Shell]]<br />
[[pt:Secure Shell]]<br />
[[ru:Secure Shell]]<br />
[[sr:Secure Shell]]<br />
{{Archive}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|SSH keys}}<br />
{{Related|Pam abl}}<br />
{{Related|fail2ban}}<br />
{{Related|sshguard}}<br />
{{Related|Sshfs}}<br />
{{Related|Syslog-ng}}<br />
{{Related|SFTP chroot}}<br />
{{Related articles end}}<br />
'''Secure Shell''' ('''SSH''') 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。<br />
<br />
SSH 通常用于远程访问和执行命令,但是它也支持隧道,转发任意 TCP 端口以及 X11 连接;它还能够用 SFTP 或 SCP 协议来传输文件。<br />
<br />
一个 SSH 服务器,默认地,在 TCP 端口 22 进行监听。一个 SSH 客户端程序通常被用来建立一个远程连接到 '''sshd''' 守护进程。这两者都被广泛地存在于现代操作系统中,包括 Mac OS X,GNU/Linux,Solaris 和 OpenVMS 等。以专利的,自由软件的以及开源版本的形式和不同的复杂性和完整性存在。<br />
<br />
(来源:[[Wikipedia:Secure Shell|维基百科 Secure Shell]])<br />
<br />
== OpenSSH ==<br />
<br />
OpenSSH (OpenBSD Secure Shell) 是一套使用ssh协议,通过计算机网络,提供加密通讯会话的计算机程序。它被创建为 SSH Communications Security 公司拥有专利的 Secure Shell 软件套装的一个开源替代。OpenSSH是由Theo de Raadt领导的OpenBSD项目的一部分。 <br />
<br />
人们常把 OpenSSH 与相似名字的 OpenSSL 搞混,但是,这两个项目是由不同的团队出于不同的目的开发出来的。相似的名字只是由于相似的目标。<br />
<br />
=== 安装OpenSSH ===<br />
从[[官方源]]中[[安装]] {{pkg|openssh}}.<br />
<br />
=== 配置SSH ===<br />
====客户端====<br />
SSH客户端的配置文件是{{ic|/etc/ssh/ssh_config}} 或 {{ic|~/.ssh/config}}.<br />
<br />
现在已经不需要额外设置 {{ic|Protocol 2}}, 默认的协议已经是 {{ic|Protocol 2}} 了(http://www.openssh.org/txt/release-5.4)。<br />
<br />
====守护进程====<br />
SSH 守护进程的配置文件是{{ic|/etc/ssh/ssh'''d'''_config}}。<br />
<br />
只允许某些用户访问的话,加入这一行:<br />
AllowUsers user1 user2<br />
<br />
只允许一些组访问:<br />
AllowGroups group1 group2<br />
<br />
要禁止通过SSH进行root用户登录,加入以下行:<br />
PermitRootLogin no<br />
<br />
你也可以取消BANNER选项的注释,然后编辑{{ic|/etc/issue}}加入友好的欢迎信息内容。<br />
<br />
{{小贴士|<br />
* 可以考虑把默认的端口从22改成更高的端口(参考 [[wikipedia:Security_through_obscurity|security through obscurity]]).尽管ssh的运行端口可以被像nmap这样的端口扫描器侦测到,但改变它可以减少由于自动验证的尝试造成的登录日志条目。<br />
* 完全取消密码登录方式可以极大的增强安全性,(参考 [[SSH keys (简体中文)|SSH Keys]]).<br />
}}<br />
<br />
=== 管理 sshd 守护进程 ===<br />
你可以使用下面的命令启动sshd:<br />
# systemctl start sshd<br />
<br />
你可以使用下面的命令开机启动sshd:<br />
# systemctl enable sshd.service<br />
<br />
{{警告|Systemd 是一个异步启动的进程。如果你绑定 SSH 守护进程到某个特定的 IP 地址 {{ic|ListenAddress 192.168.1.100}},它可能会在引导时启动失败,因为默认的 sshd.service 单元文件没有对网络接口启动的依赖。当绑定到一个 IP 地址时,你需要添加 {{ic|After&#61;network.target}} 到自定义的 sshd.service 单元文件中。参见 [[Systemd#Replacing provided unit files]]{{Broken section link}}.}}<br />
<br />
或者你可以启用SSH Daemon socket,这样当第一次传入连接时启动守护进程:<br />
# systemctl enable sshd.socket<br />
如果你使用非默认端口22,你必须在文件(/lib/systemd/system/sshd.socket)中设置"ListenStream"为相应的端口。<br />
<br />
===连接到服务器===<br />
<br />
运行下面的命令:<br />
$ ssh -p port user@server-address<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 加密Socks通道 ===<br />
对于连接到各种不安全的无线网络上的笔记本电脑用户来说,这个是特别有用的!唯一所需要的就是一个一定程度上处于安全的地点的SSH服务器,比如在家里或办公室。用动态的DNS服务[http://www.dyndns.org/ DynDNS]也可能是很有用的,这样你就不必记住你的IP了。<br />
<br />
==== 第一步:开始连接 ====<br />
你只要在你喜欢的终端中执行这一个命令就能开始你的连接:<br />
$ ssh -ND 4711 user@host<br />
这里的“user”是你在“host”这台SSH服务器上运行的用户名。它会让你输入密码,然后你就能连上了。“N”表示不采用交互提示,而“D”表示指定监听的本地端口(你可以使用任何你喜欢的数字)<br />
<br />
一个办法可以让这个过程更简单,那就是在~/.bashrc中加入这样一行:<br />
alias sshtunnel="ssh -ND 4711 -v user@host"<br />
加入冗长的“-v”标志更好,因为这样你可以验证是真的是从那个端口连接的。现在你只要执行命令“sshtunnel”就可以。 :)<br />
<br />
==== 第二步:配置你的浏览器(或其它程序) ====<br />
<br />
如果你不配置你的web浏览器以便使用新创建的socks通道的话,上面的一步完全没用!<br />
<br />
* 对于Firefox: ''Edit -> Preferences -> Advanced -> Network -> Connection -> Setting'':<br />
: 检查"Manual proxy configuration" radio button?, 并且在"SOCKS host" 文本段输入"localhost" , 然后在接下来的一个文本框中输入你的端口数(上面我们用的是4711)。<br />
<br />
: 确定你选择使用SOCKS4。这个程序对不会对SOCKS5起作用.<br />
<br />
:享受你的安全通道吧!<br />
<br />
=== X11 转发 ===<br />
<br />
为了通过SSH运行图形程序你必须使用X11 Forwarding。一个选项就是需要设置服务器和客户端的配置文件(这里所说的“客户端”指运行你的X11服务器的电脑,而你的X应用程序运行在“服务器”上)。<br />
<br />
在服务器上安装xorg-xauth:<br />
# pacman -S xorg-xauth<br />
<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''AllowTcpForwarding'''选项。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''X11Forwarding'''选项。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}将'''X11DisplayOffset'''选项设为10。<br />
* 在'''服务器'''上,编辑{{ic|ssh'''d'''_config}}启用'''X11UseLocalhost'''选项。<br />
同时:<br />
* 在'''客户端'''上,编辑{{ic|ssh_config}}启用'''ForwardX11'''选项。<br />
<br />
当GUI大量绘制时,请启用'''ForwardX11Trusted'''。<br />
<br />
为了使用X11 forwarding,首先通过SSH登陆到你的服务器:<br />
$ ssh -X -p port user@server-address<br />
如果你在运行图形应用程序时收到了一些错误,请尝试可信的X11 forwarding:<br />
$ ssh -Y -p port user@server-address<br />
你现在可以在远程服务器上启用任何的X程序,输出将会被转发到你的本地会话中:<br />
$ xclock<br />
<br />
如果你遇到了“Cannot open display”错误,请尝试使用非root账户执行下述命令:<br />
$ xhost +<br />
<br />
上述命令将会允许任何用户转发X11应用程序。为了限制只能转发到特定主机:<br />
$ xhost +hostname<br />
<br />
上述命令中的hostname是你想要转发到的主机名。使用“man xhost”获取更多信息。<br />
<br />
值得注意的是,一些应用程序会检查本地正在运行的实例。Firefox就是一个例子。你可以关闭正在执行的Firefox,或者使用下述启动参数来在本地启动一个远程实例:<br />
$ firefox -no-remote<br />
<br />
=== 转发其他端口 ===<br />
除了SSH内建的对X11的支持之外,它也能通过本地转发和远程转发,来为任何的TCP连接建立隧道。<br />
<br />
本地转发时,会在本机打开一个端口,连接将被转发到一个远程主机,并给定一个目的地。很多时候,转发目的地和远程主机会相同,因此也提供了一条SSH命令来建立一个安全的VNC连接。本地转发可以通过{{Ic|-L}}来设置,后面可以指定一个地址及端口{{Ic|<tunnel port>:<destination address>:<destination port>}}。<br />
如下:<br />
<br />
$ ssh -L 1000:mail.google.com:25 192.168.0.100<br />
<br />
以上指令将会通过SSH得到一个在192.168.0.100的shell,同时也会创建一个从本机1000端口到mai.google.com上的25端口的隧道。建立之后,localhost:1000会通过192.168.0.100连接到Gmail的SMTP端口。任何从192.168.0.100到mail.google.com:25的连接(即使不必要)都会以这样的方式建立,并且,在本机和192.168.0.100之间的数据传递都是安全的,除非你采取了别的手段。<br />
同样:<br />
<br />
$ ssh -L 2000:192.168.0.100:6001 192.168.0.100<br />
$ ssh -L 2000:localhost:6001 192.168.0.100<br />
<br />
以上指令会将到localhost:2000的连接直接转发到远程主机192.168.0.100的6001端口。对于使用VNC服务器(tightvns包的一部分)建立的VNC连接来说,以上的例子尽管很有效,但是安全性有待商榷。<br />
<br />
远程转发允许任何远程主机通过SSH隧道连接到本机,提供了和本地转发相反的功能,突破了防火墙的限制。通过{{Ic|-R}}参数,以及{{Ic|<tunnel port>:<destination address>:<destination>}}能够实现远程转发。<br />
<br />
如下:<br />
<br />
$ ssh -R 3000:irc.freenode.net:6667 192.168.0.200<br />
<br />
将会在192.168.0.200上得到一个shell,同时也会创建一个从192.168.0.200上的3000端口到irc.freenode.net上的6667端口的隧道。建立之后,192.168.0.200:3000会通过本机连接到freenode的IRC端口。到192.168.0.200的3000端口的连接将会通过隧道发送到本机然后转发到irc.freenode.net的6667端口。因此,在这个例子中,在远程主机上IRC程序能够被使用,即使端口6667被阻止。<br />
<br />
本地转发{{Ic|-L}}和远程转发{{Ic|-R}}都可以提供一个安全的"网关",允许其他计算机无需使用SSH或者SSH daemon来使用ssh隧道。例如 {{Ic|<tunnel address>:<tunnel port>:<destination address>:<destination port>}}.<br />
{{Ic|<tunnel address>}}可以是作为网关的机器上的任何地址,例如 {{Ic|localhost}}(仅允许本地访问),{{Ic|192.168.0.100}}(仅允许通过192.168.0.100访问), {{Ic|*}}(允许所有地址访问)。<br />
{{Ic|<tunnel address>}}若留空则默认设置为{{Ic|localhost}},本地转发{{Ic|-L}}不需要额外的设置,而远程转发{{Ic|-R}}需要配置SSH daemon设置,请参阅{{Ic|sshd_config(5)}}中的{{Ic|GatewayPorts}}。<br />
<br />
=== 加速SSH ===<br />
为了加速连续的到同一台主机的连接,你可以在远程主机的{{ic|/etc/ssh/ssh_config}}中增加以下内容:<br />
ControlMaster auto<br />
ControlPath ~/.ssh/socket-%r@%h:%p<br />
改变SSH的计算来减少cpu使用能够提高速度。关于这一点,最好的选择是arcfour和blowfish-cbc。<br />
'''除非你清楚你在做什么,否则不要做; arcfour有大量众所周知的缺点'''。 通过增加参数{{Ic|"c"}}:<br />
$ ssh -c arcfour,blowfish-cbc user@server-address<br />
为了持续地使用这个,可以在{{ic|/etc/ssh/ssh_config}}中增加以下内容:<br />
Ciphers arcfour,blowfish-cbc<br />
其他能够加速的选项是{{Ic|"C"}}参数,同样,以下将是长久的解决方案:<br />
Compression yes<br />
登陆时间可以通过{{Ic|"4"}}来减少,它是通过IPv6旁路进行寻路。同上:<br />
AddressFamily inet<br />
或者在{{ic|~/.bashrc}}中增加以下内容也能够达到长久的效果(前提是你使用bash):<br />
alias ssh='ssh -C4c arcfour,blowfish-cbc'<br />
<br />
==== 问题解决 ====<br />
确定你的“DISPLAY”变量在远程主机上能被解析:<br />
<br />
$ ssh -X user@server-address<br />
server $ echo $DISPLAY<br />
localhost:10.0<br />
server $ telnet localhost 6010<br />
localhost/6010: lookup failure: Temporary failure in name resolution <br />
<br />
这个问题能通过添加localhost到 {{ic|/etc/hosts}}来解决。<br />
<br />
=== 用SSHFS挂载远程文件系统 ===<br />
<br />
安装sshfs<br />
# pacman -S sshfs<br />
<br />
将你想要允许挂载SSH文件夹的用户添加到fuse组里<br />
<br />
# gpasswd -a USER fuse<br />
<br />
加载fuse模块(比如说在/etc/rc.conf中)<br />
<br />
And then然后,在登录后,你就可以试着挂用sshfs载远程文件夹了:<br />
# mkdir ~/remote_folder<br />
# sshfs USER@remote_server:/tmp ~/remote_folder<br />
<br />
上面的命令将把远程服务器上的/tmp文件夹挂载到本地的~/remote_folder目录下。复制任何文件到这个目录将使文件通过SCP通过网络传输。<br />
Same concerns direct file editing, creating or removing.<br />
<br />
当我们完成在远程文件夹下的工作,我们可以这样来卸载它:<br />
# fusermount -u ~/remote_folder<br />
<br />
如果我们需要经常在这个文件夹下,让它通过/etc/fstab挂载是一个明智的选择。这个办法可以让它在启动的时候挂载或者通过手动挂载(如果是noauto选项的话),而不需要每次都去挂载它。下面是一个简单的样本: <br />
sshfs#USER@remote_server:/tmp /full/path/to/directory fuse defaults,auto 0 0<br />
=== 保持在线 ===<br />
如果你的会话空闲,它会自动登出。为了保持会话, 可以把以下内容增加到客户端的{{ic|~/.ssh/config}}或者{{ic|/etc/ssh/ssh_config}}。<br />
<br />
ServerAliveInterval 120<br />
<br />
这将会使得客户端每120秒发送一个“alive”的信号到服务器。<br />
<br />
反过来,为了保持到达本地的会话,你可以设置:<br />
<br />
ClientAliveInterval 120<br />
<br />
(或者其他任何大于0的数字)在服务器的{{ic|/etc/ssh/sshd_config}}。<br />
<br />
===在配置文件中保存连接信息 ===<br />
通常当你想登录到一台远程主机的时候,你至少需要输入主机名和IP地址。为了减少这个重复劳动,你可以使用本地的{{ic|$HOME/.ssh/config}} 或者全局的{{ic|/etc/ssh/ssh_config}}:<br />
<br />
{{hc|$HOME/.ssh/config|<br />
Host myserver<br />
HostName 123.123.123.123<br />
Port 12345<br />
User bob<br />
Host other_server<br />
HostName test.something.org<br />
User alice<br />
CheckHostIP no<br />
Cipher blowfish<br />
}}<br />
<br />
现在你能用指定的名称来简单地连接到远程主机:<br />
<br />
$ ssh myserver<br />
<br />
如果需要查看完整选项,可以查看你的系统上的ssh_config文档, 或者它的官方网站[http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config ssh_config documentation]。<br />
<br />
=== 更改ssh主机prompt ===<br />
区别你的电脑和远程主机是很有必要的,特别是它们的prompt相同时。只要把一下内容插入到你的bashrc文件即可达到这个效果。<br />
<br />
{{hc|$HOME/.bashrc|2=<br />
if [ -n "$SSH_CLIENT" ]; then<br />
PS1='\[\e[0;33m\]\u@\h:\wSSH$\[\e[m\] '<br />
else<br />
PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\ e[m\] '<br />
fi<br />
}}<br />
<br />
可以访问[[Color Bash Prompt]]了解更多关于PS1变量定制的更多信息。<br />
<br />
=== 当sshd服务器宕机时自动登出所有客户端 ===<br />
为了在sshd服务器宕机(比如重启或关机)时自动登出所有客户端,需要在sshd服务器的/etc/rc.local.shutdown 增加以下内容:<br />
<br />
who | cut -d " " -f1 | uniq | xargs pkill -KILL -u<br />
<br />
这防止了ssh客户端在超时之后挂起,最终得到这样的结果:<br />
<br />
Write failed: Broken pipe<br />
<br />
== 问题解决 ==<br />
=== 拒绝连接或者超时问题 ===<br />
==== SSH服务是否开启并且正在监听吗? ====<br />
$ ssh -tnlp<br />
<br />
如果以上的命令没有显示SSH端口是打开的,那么说明SSH服务没有启动。查看{{ic|/var/log/messages}}来寻找错误信息。<br />
<br />
==== 是否是防火墙阻止了连接? ====<br />
更新你的防火墙规则来排除干扰:<br />
<br />
# rc.d stop iptables<br />
<br />
或者:<br />
<br />
# iptables -P INPUT ACCEPT<br />
# iptables -P OUTPUT ACCEPT<br />
# iptables -F INPUT<br />
# iptables -F OUTPUT<br />
<br />
==== 你的电脑和目的主机之间是否连接? ====<br />
测试你的电脑和目的主机的连接情况:<br />
<br />
# tcpdump -lnn -i any port ssh and tcp-syn<br />
<br />
它会显示一些基本信息,然后等待数据交换。现在尝试你的连接。如果没有输出,就可能是你的电脑网络阻塞了。(也许是防火墙问题,也许是NAT路由的问题,祝你好运!)<br />
<br />
==== Read from socket failed: Connection reset by peer ====<br />
最近版本的openssh有时候会因为以上信息崩溃,据说是elliptic curve 加密的bug。在这种情况下,请编辑这个文件:<br />
<br />
~/.ssh/config<br />
<br />
如果不存在,就创建它,然后加入以下内容:<br />
HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss<br />
<br />
在openssh5.9中,以上的修复工作不会奏效。不过,还可以这样做:<br />
<br />
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc <br />
MACs hmac-md5,hmac-sha1,hmac-ripemd160<br />
<br />
可以访问[http://www.gossamer-threads.com/lists/openssh/dev/51339 discussion]来查看openssh的bug问题.<br />
<br />
=== "[your shell]: No such file or directory" / ssh认证问题 ===<br />
<br />
对于这个问题,一个可能的原因是需要SSH客户端在{{Ic|$SHELL}}中提供绝对路径(例如可以通过{{Ic|whereis -b [your shell]}}得到),即使你的shell在{{Ic|$PATH}}中。另一个原因也可能是,用户不是''network''组的成员。<br />
<br />
== See Also ==<br />
*[[SSH keys]]<br />
*[[Pam abl]]<br />
*[[fail2ban]]<br />
*[[sshguard]]<br />
*[[Sshfs]]<br />
*[http://www.soloport.com/iptables.html A Cure for the Common SSH Login Attack]<br />
*[[使用SSH密钥]]<br />
*[http://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]<br />
*[http://www.ibm.com/developerworks/library/l-keyc/index.html OpenSSH key management, Part 1] and [http://www.ibm.com/developerworks/library/l-keyc2 Part 2] on IBM developerWorks</div>
0x79h