<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SSH &#8211; bhzhuOS爱好者(原StartOS爱好者)</title>
	<atom:link href="https://www.bhzhu203.com/tag/ssh/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bhzhu203.com</link>
	<description>QQ群号125732839</description>
	<lastBuildDate>Thu, 28 Apr 2016 08:43:21 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>
	<item>
		<title>25个iptables常用示例</title>
		<link>https://www.bhzhu203.com/2016/04/28/25%e4%b8%aaiptables%e5%b8%b8%e7%94%a8%e7%a4%ba%e4%be%8b-2/</link>
					<comments>https://www.bhzhu203.com/2016/04/28/25%e4%b8%aaiptables%e5%b8%b8%e7%94%a8%e7%a4%ba%e4%be%8b-2/#comments</comments>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 08:43:21 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[FORWARD]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=281</guid>

					<description><![CDATA[bbsrbs  投稿 本文将给出25个iptables常用规则示例，这些例子为您 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><small class="text-muted"> bbsrbs </small> 投稿</p>
<p>本文将给出25个iptables常用规则示例，这些例子为您提供了些基本的模板，您可以根据特定需求对其进行修改调整以达到期望，更多Linux技术、命令教学请百度搜索“Linux就该这么学”（www.linuxprobe.com)。<br />
格式<br />
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]<br />
参数<br />
-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)<br />
-F 清空规则链<br />
-L 查看规则链<br />
-A 在规则链的末尾加入新规则<br />
-I num 在规则链的头部加入新规则<br />
-D num 删除某一条规则<br />
-s 匹配来源地址IP/MASK，加叹号&#8221;!&#8221;表示除这个IP外。<br />
-d 匹配目标地址<br />
-i 网卡名称 匹配从这块网卡流入的数据<br />
-o 网卡名称 匹配从这块网卡流出的数据<br />
-p 匹配协议,如tcp,udp,icmp<br />
&#8211;dport num 匹配目标端口号<br />
&#8211;sport num 匹配来源端口号<br />
示例<br />
1. 删除已有规则<br />
在开始创建iptables规则之前，你也许需要删除已有规则。命令如下：<br />
iptables -F(or)iptables –flush<br />
2.设置链的默认策略<br />
链的默认政策设置为”ACCEPT”（接受），若要将INPUT,FORWARD,OUTPUT链设置成”DROP”（拒绝），命令如下：<br />
iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP<br />
当INPUT链和OUTPUT链都设置成DROP时，对于每一个防火墙规则，我们都应该定义两个规则。例如：一个传入另一个传出。在下面所有的例子中，由 于我们已将DROP设置成INPUT链和OUTPUT链的默认策略，每种情况我们都将制定两条规则。当然，如果你相信你的内部用户,则可以省略上面的最后 一行。例如：默认不丢弃所有出站的数据包。在这种情况下,对于每一个防火墙规则要求,你只需要制定一个规则——只对进站的数据包制定规则。<br />
3. 阻止指定IP地址<br />
例：丢弃来自IP地址x.x.x.x的包<br />
BLOCK_THIS_IP=&#8221;x.x.x.x&#8221;iptables -A INPUT -s &#8220;$BLOCK_THIS_IP&#8221; -j DROP<br />
注：当你在log里发现来自某ip地址的异常记录，可以通过此命令暂时阻止该地址的访问以做更深入分析<br />
例：阻止来自IP地址x.x.x.x eth0 tcp的包<br />
iptables -A INPUT -i eth0 -s &#8220;$BLOCK_THIS_IP&#8221; -j DROPiptables -A INPUT -i eth0 -p tcp -s &#8220;$BLOCK_THIS_IP&#8221; -j DROP<br />
4. 允许所有SSH的连接请求<br />
例：允许所有来自外部的SSH连接请求，即只允许进入eth0接口，并且目标端口为22的数据包<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 22 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 22 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
5. 仅允许来自指定网络的SSH连接请求<br />
例：仅允许来自于192.168.100.0/24域的用户的ssh连接请求<br />
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 &#8211;dport 22 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 22 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
6.允许http和https的连接请求<br />
例：允许所有来自web &#8211; http的连接请求<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 80 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 80 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
例：允许所有来自web &#8211; https的连接请求<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 443 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 443 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
7. 使用multiport 将多个规则结合在一起<br />
允许多个端口从外界连入，除了为每个端口都写一条独立的规则外，我们可以用multiport将其组合成一条规则。如下所示：<br />
例：允许所有ssh,http,https的流量访问<br />
iptables -A INPUT -i eth0 -p tcp -m multiport &#8211;dports 22,80,443 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp -m multiport &#8211;sports 22,80,443 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
8. 允许从本地发起的SSH请求<br />
iptables -A OUTPUT -o eth0 -p tcp &#8211;dport 22 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp &#8211;sport 22 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
请注意,这与允许ssh连入的规则略有不同。本例在OUTPUT链上，我们允许NEW和ESTABLISHED状态。在INPUT链上，我们只允许ESTABLISHED状态。ssh连入的规则与之相反。<br />
9. 仅允许从本地发起到一个指定的网络域的SSH请求<br />
例：仅允许从内部连接到网域192.168.100.0/24<br />
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 &#8211;dport 22 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp &#8211;sport 22 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
10. 允许从本地发起的HTTPS连接请求<br />
下面的规则允许输出安全的网络流量。如果你想允许用户访问互联网，这是非常有必要的。在服务器上，这些规则能让你使用wget从外部下载一些文件<br />
iptables -A OUTPUT -o eth0 -p tcp &#8211;dport 443 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp &#8211;sport 443 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
注：对于HTTP web流量的外联请求，只需要将上述命令中的端口从443改成80即可。<br />
11. 负载平衡传入的网络流量<br />
使用iptables可以实现传入web流量的负载均衡，我们可以传入web流量负载平衡使用iptables防火墙规则。<br />
例：使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址。<br />
iptables -A PREROUTING -i eth0 -p tcp &#8211;dport 443 -m state &#8211;state NEW -m nth &#8211;counter 0 &#8211;every 3 &#8211;packet 0 -j DNAT &#8211;to-destination 192.168.1.101:443iptables -A PREROUTING -i eth0 -p tcp &#8211;dport 443 -m state &#8211;state NEW -m nth &#8211;counter 0 &#8211;every 3 &#8211;packet 1 -j DNAT &#8211;to-destination 192.168.1.102:443iptables -A PREROUTING -i eth0 -p tcp &#8211;dport 443 -m state &#8211;state NEW -m nth &#8211;counter 0 &#8211;every 3 &#8211;packet 2 -j DNAT &#8211;to-destination 192.168.1.103:443<br />
12. 允许外部主机ping内部主机<br />
iptables -A INPUT -p icmp &#8211;icmp-type echo-request -j ACCEPTiptables -A OUTPUT -p icmp &#8211;icmp-type echo-reply -j ACCEPT<br />
13. 允许内部主机ping外部主机<br />
iptables -A OUTPUT -p icmp &#8211;icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp &#8211;icmp-type echo-reply -j ACCEPT<br />
14. 允许回环访问<br />
例：在服务器上允许127.0.0.1回环访问。<br />
iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT<br />
15. 允许内部网络域外部网络的通信<br />
防火墙服务器上的其中一个网卡连接到外部，另一个网卡连接到内部服务器，使用以下规则允许内部网络与外部网络的通信。此例中，eth1连接到外部网络(互联网)，eth0连接到内部网络(例如:192.168.1.x)。<br />
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT<br />
16. 允许出站的DNS连接<br />
iptables -A OUTPUT -p udp -o eth0 &#8211;dport 53 -j ACCEPTiptables -A INPUT -p udp -i eth0 &#8211;sport 53 -j ACCEPT<br />
17. 允许NIS连接<br />
如果你使用NIS管理用户帐户，你需要允许NIS连接。如果你不允许NIS相关的ypbind连接请求，即使SSH连接请求已被允许，用户仍然无法登录。NIS的端口是动态的，先使用命令rpcinfo –p来知道端口号，此例中为853和850端口。<br />
rpcinfo -p | grep ypbind<br />
例：允许来自111端口以及ypbind使用端口的连接请求<br />
iptables -A INPUT -p tcp &#8211;dport 111 -j ACCEPTiptables -A INPUT -p udp &#8211;dport 111 -j ACCEPTiptables -A INPUT -p tcp &#8211;dport 853 -j ACCEPTiptables -A INPUT -p udp &#8211;dport 853 -j ACCEPTiptables -A INPUT -p tcp &#8211;dport 850 -j ACCEPTiptables -A INPUT -p udp &#8211;dport 850 -j ACCEPT<br />
注：当你重启ypbind之后端口将不同，上述命令将无效。有两种解决方案：1）使用你NIS的静态IP 2）编写shell脚本通过“rpcinfo &#8211; p”命令自动获取动态端口号,并在上述iptables规则中使用。<br />
18. 允许来自指定网络的rsync连接请求<br />
例：允许来自网络192.168.101.0/24的rsync连接请求<br />
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 &#8211;dport 873 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 873 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
19. 允许来自指定网络的MySQL连接请求<br />
很多情况下，MySQL数据库与web服务跑在同一台服务器上。有时候我们仅希望DBA和开发人员从内部网络（192.168.100.0/24）直接登录数据库，可尝试以下命令：<br />
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 &#8211;dport 3306 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 3306 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
20. 允许Sendmail, Postfix邮件服务<br />
Sendmail和postfix都使用了25端口，因此我们只需要允许来自25端口的连接请求即可。<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 25 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 25 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
21. 允许IMAP和IMAPS<br />
例：允许IMAP/IMAP2流量，端口为143<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 143 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 143 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
例：允许IMAPS流量，端口为993<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 993 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 993 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
22. 允许POP3和POP3S<br />
例：允许POP3访问<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 110 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 110 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
例：允许POP3S访问<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 995 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 995 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
23. 防止DoS攻击<br />
iptables -A INPUT -p tcp &#8211;dport 80 -m limit &#8211;limit 25/minute &#8211;limit-burst 100 -j ACCEPT<br />
上述例子中：<br />
-m limit: 启用limit扩展<br />
–limit 25/minute: 允许最多每分钟25个连接（根据需求更改）。<br />
–limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制。<br />
24. 端口转发<br />
例：将来自422端口的流量全部转到22端口。<br />
这意味着我们既能通过422端口又能通过22端口进行ssh连接。启用DNAT转发。<br />
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 &#8211;dport 422 -j DNAT &#8211;to 192.168.102.37:22<br />
除此之外，还需要允许连接到422端口的请求<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 422 -m state &#8211;state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp &#8211;sport 422 -m state &#8211;state ESTABLISHED -j ACCEPT<br />
25. 记录丢弃的数据表<br />
第一步：新建名为LOGGING的链<br />
iptables -N LOGGING<br />
第二步：将所有来自INPUT链中的数据包跳转到LOGGING链中<br />
iptables -A INPUT -j LOGGING<br />
第三步：为这些包自定义个前缀，命名为”IPTables Packet Dropped”<br />
iptables -A LOGGING -m limit &#8211;limit 2/min -j LOG &#8211;log-prefix &#8220;IPTables Packet Dropped: &#8221; &#8211;log-level 7<br />
第四步：丢弃这些数据包<br />
iptables -A LOGGING -j DROP</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bhzhu203.com/2016/04/28/25%e4%b8%aaiptables%e5%b8%b8%e7%94%a8%e7%a4%ba%e4%be%8b-2/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>一个可以显示Linux命令运行进度的伟大工具</title>
		<link>https://www.bhzhu203.com/2016/04/28/%e4%b8%80%e4%b8%aa%e5%8f%af%e4%bb%a5%e6%98%be%e7%a4%balinux%e5%91%bd%e4%bb%a4%e8%bf%90%e8%a1%8c%e8%bf%9b%e5%ba%a6%e7%9a%84%e4%bc%9f%e5%a4%a7%e5%b7%a5%e5%85%b7/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 08:04:54 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[Dan Nanni]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=224</guid>

					<description><![CDATA[Coreutils Viewer（cv）是一个简单的程序，它可以用于显示任何核心 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="d">
<div id="article_content">
<p>Coreutils Viewer（<strong>cv</strong>）是一个简单的程序，它可以用于显示任何核心组件命令（如：cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting）的进度。它使用文件描述信息来确定一个命令的进度，比如cp命令。<strong>cv</strong>之美在于，它能够和其它Linux命令一起使用，比如你所知道的watch以及I/O重定向命令。这样，你就可以在脚本中使用，或者你能想到的所有方式，别让你的想象力束缚住你。</p>
<p class="article_img"><img fetchpriority="high" decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201501/24/221941p7k1tt1au71pp3fo.jpg" alt="" width="500" height="300" /></p>
<p><a id="3_696" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_1">安装</h3>
<p>你可以从cv的<a class="ext" href="http://github.com/Xfennec/cv" target="_blank" rel="external nofollow">github仓库那儿</a>下载所需的源文件。把zip文件下载下来后，将它解压缩，然后进入到解压后的文件夹。</p>
<p>该程序需要<strong>ncurses library</strong>。如果你已经在你的Linux系统中安装了ncurses，那么cv的安装过程对你而言就是那么的轻松写意。</p>
<p>通过以下两个简单步骤来进行编译和安装吧。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ </span><span class="kwd">make</span></li>
<li class="L1"><span class="pln">$ </span><span class="kwd">sudo</span> <span class="kwd">make</span><span class="pln"> install</span></li>
</ol>
<p><a id="3_1246" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_2">运行cv</h3>
<p>要运行cv，只需要想其它程序一样，在命令行输入此命令即可。如果你没有执行make install，而选择从当前目录中去运行，那么你可以运行以下命令：</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ </span><span class="pun">./</span><span class="pln">cv</span></li>
</ol>
<p>否则，就运行以下命令吧。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ cv</span></li>
</ol>
<p>如果没有核心组件命令在运行，那么cv程序会退出，并告诉你：没有核心组件命令在运行。</p>
<p class="article_img"><img decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201501/24/221944m5wapc52wpbr35zi.png" alt="cv no command" /></p>
<p class="article_img_desc"><em>cv no command</em></p>
<p>要有效使用该程序，请在你系统上运行某个核心组件程序。在本例中，我们将使用<strong>cp</strong>命令。</p>
<p>当拷贝一个打文件时，你就可以看到当前进度了，以百分比显示。</p>
<p class="article_img"><img decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201501/24/221945fy3dyzessyd4deoy.png" alt="cv default" /></p>
<p class="article_img_desc"><em>cv default</em></p>
<p><a id="3_2238" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_3">添加选项到 cv</h3>
<p>你也可以添加几个选项到cv命令，就像其它命令一样。一个有用的选项是让你了解到拷贝或移动大文件时的预计剩余时间。</p>
<p>添加<strong>-w</strong>选项，它就会帮你显示预计的剩余时间。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ cv </span><span class="pun">&#8211;</span><span class="kwd">w</span></li>
</ol>
<p class="article_img"><img decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201501/24/221946xja22atafaabajbf.png" alt="cv estimated throughput" /></p>
<p class="article_img_desc"><em>cv estimated throughput</em></p>
<p>试着添加更多的命令选项吧。像下面这样添加其它选项：</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ cv </span><span class="pun">&#8211;</span><span class="pln">wq</span></li>
</ol>
<p><a id="3_2858" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_4">cv 和 watch 命令</h3>
<p>watch是一个用于周期性运行程序并显示输出结果的程序。有时候，你可能想要持续看看命令运行状况而不想将 cv 的结果存储到日志文件中。在这种情况下，watch就会派上用场了，它可以和cv一起使用。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ </span><span class="kwd">watch</span><span class="pln"> cv </span><span class="pun">&#8211;</span><span class="pln">qw</span></li>
</ol>
<p>该命令将会显示所有运行着的核心组件命令的实例。它也会显示进度和预计完成时间。</p>
<p class="article_img"><img decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201501/24/221948qmxvt2ptpqztttz2.png" alt="cv and watch" /></p>
<p class="article_img_desc"><em>cv and watch</em></p>
<p><a id="3_3475" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_5">在日志文件中查看输出结果</h3>
<p>正如其所承诺的那样，你可以使用cv来重定向它的输出结果到一个日志文件。这功能在命令运行太快而看不到任何有意义的内容时特别有用。</p>
<p>要在日志文件中查看进度，你仅仅需要重定向输出结果，就像下面这样。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ cv </span><span class="pun">&#8211;</span><span class="kwd">w</span> <span class="pun">&gt;&gt;</span><span class="pln"> log</span><span class="pun">.</span><span class="pln">txt</span></li>
</ol>
<p>要查看该命令的输出结果，请用你喜爱的文本编辑器打开日志文件，也可以用cat命令，就像下面这样：</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ </span><span class="kwd">cat</span><span class="pln"> log</span><span class="pun">.</span><span class="pln">txt</span></li>
</ol>
<p><a id="3_4101" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_6">获得帮助</h3>
<p>如果你在任何地方受到阻碍，你总是可以通过查阅手册页或使用help选项来获取帮助信息。 要获取帮助信息，可以使用带<strong>-h</strong>选项的cv命令。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ cv </span><span class="pun">&#8211;</span><span class="pln">h</span></li>
</ol>
<p>如果需要更多详细信息，那么手册页是个很不错的地方。</p>
<ol class="linenums">
<li class="L0"><span class="pln">$ </span><span class="kwd">man</span><span class="pln"> cv</span></li>
</ol>
<p>但是，要获取上述手册页，你必须执行make install来安装cv。</p>
<p>耶！现在，你的Linux工具箱中又多了个伟大的工具。 你学会么？亲自去试试吧~</p>
<hr />
<p>via: <a class="ext" href="http://linoxide.com/linux-command/tool-show-command-progress/" target="_blank" rel="external nofollow">http://linoxide.com/linux-command/tool-show-command-progress/</a></p>
<p>作者：<a class="ext" href="http://linoxide.com/author/allan/" target="_blank" rel="external nofollow">Allan Mbugua</a> 译者：<a class="ext" href="https://github.com/GOLinux" target="_blank" rel="external nofollow">GOLinux</a> 校对：<a class="ext" href="https://github.com/wxy" target="_blank" rel="external nofollow">wxy</a></p>
<p>本文由 <a class="ext" href="https://github.com/LCTT/TranslateProject" target="_blank" rel="external nofollow">LCTT</a> 原创翻译，<a href="https://linux.cn/article-4741-1.html">Linux中国</a> 荣誉推出</p>
</div>
</div>
<div class="b"></div>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>如何通过反向 SSH 隧道访问 NAT 后面的 Linux 服务器</title>
		<link>https://www.bhzhu203.com/2016/04/28/%e5%a6%82%e4%bd%95%e9%80%9a%e8%bf%87%e5%8f%8d%e5%90%91-ssh-%e9%9a%a7%e9%81%93%e8%ae%bf%e9%97%ae-nat-%e5%90%8e%e9%9d%a2%e7%9a%84-linux-%e6%9c%8d%e5%8a%a1%e5%99%a8/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 08:03:03 +0000</pubDate>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[Dan Nanni]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=222</guid>

					<description><![CDATA[转自：https://linux.cn/article-5975-1.html  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>转自：https://linux.cn/article-5975-1.html</p>
<div id="article_content">
<p>你在家里运行着一台 Linux 服务器，它放在一个 NAT 路由器或者限制性防火墙后面。现在你想在外出时用 SSH 登录到这台服务器。你如何才能做到呢？SSH 端口转发当然是一种选择。但是，如果你需要处理多级嵌套的 NAT 环境，端口转发可能会变得非常棘手。另外，在多种 ISP 特定条件下可能会受到干扰，例如阻塞转发端口的限制性 ISP 防火墙、或者在用户间共享 IPv4 地址的运营商级 NAT。</p>
<p><a id="3_517" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_1">什么是反向 SSH 隧道？</h3>
<p>SSH 端口转发的一种替代方案是 <strong>反向 SSH 隧道</strong>。反向 SSH 隧道的概念非常简单。使用这种方案，在你的受限的家庭网络之外你需要另一台主机（所谓的“中继主机”），你能从当前所在地通过 SSH 登录到它。你可以用有公网 IP 地址的 <a class="ext" href="http://xmodulo.com/go/digitalocean" target="_blank" rel="external nofollow">VPS 实例</a> 配置一个中继主机。然后要做的就是从你的家庭网络服务器中建立一个到公网中继主机的永久 SSH 隧道。有了这个隧道，你就可以从中继主机中连接“回”家庭服务器（这就是为什么称之为 “反向” 隧道）。不管你在哪里、你的家庭网络中的 NAT 或 防火墙限制多么严格，只要你可以访问中继主机，你就可以连接到家庭服务器。</p>
<p class="article_img"><img decoding="async" src="https://dn-linuxcn.qbox.me/data/attachment/album/201508/07/235248bx5kxx52gg8yyty4.jpg" alt="" /></p>
<p><a id="3_1518" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_2">在 Linux 上设置反向 SSH 隧道</h3>
<p>让我们来看看怎样创建和使用反向 SSH 隧道。我们做如下假设：我们会设置一个从家庭服务器（homeserver）到中继服务器（relayserver）的反向 SSH 隧道，然后我们可以通过中继服务器从客户端计算机（clientcomputer） SSH 登录到家庭服务器。本例中的<strong>中继服务器</strong> 的公网 IP 地址是 1.1.1.1。</p>
<p>在家庭服务器上，按照以下方式打开一个到中继服务器的 SSH 连接。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">homeserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">ssh</span> <span class="pun">-</span><span class="pln">fN </span><span class="pun">-</span><span class="pln">R </span><span class="lit">10022</span><span class="pun">:</span><span class="pln">localhost</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> relayserver_user@1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1</span></code></li>
</ol>
<p>这里端口 10022 是任何你可以使用的端口数字。只需要确保中继服务器上不会有其它程序使用这个端口。</p>
<p>“-R 10022:localhost:22” 选项定义了一个反向隧道。它转发中继服务器 10022 端口的流量到家庭服务器的 22 号端口。</p>
<p>用 “-fN” 选项，当你成功通过 SSH 服务器验证时 SSH 会进入后台运行。当你不想在远程 SSH 服务器执行任何命令，就像我们的例子中只想转发端口的时候非常有用。</p>
<p>运行上面的命令之后，你就会回到家庭主机的命令行提示框中。</p>
<p>登录到中继服务器，确认其 127.0.0.1:10022 绑定到了 sshd。如果是的话就表示已经正确设置了反向隧道。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">sudo</span> <span class="kwd">netstat</span> <span class="pun">-</span><span class="pln">nap </span><span class="pun">|</span> <span class="kwd">grep</span> <span class="lit">10022</span></code></li>
</ol>
<hr />
<ol class="linenums">
<li class="L0"><code><span class="pln">tcp </span><span class="lit">0</span> <span class="lit">0</span> <span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pun">:</span><span class="lit">10022</span> <span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:*</span><span class="pln"> LISTEN </span><span class="lit">8493</span><span class="pun">/</span><span class="kwd">sshd</span> </code></li>
</ol>
<p>现在就可以从任何其它计算机（客户端计算机）登录到中继服务器，然后按照下面的方法访问家庭服务器。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">ssh</span> <span class="pun">-</span><span class="pln">p </span><span class="lit">10022</span><span class="pln"> homeserver_user@localhost</span></code></li>
</ol>
<p>需要注意的一点是你在上面为localhost输入的 SSH 登录/密码应该是家庭服务器的，而不是中继服务器的，因为你是通过隧道的本地端点登录到家庭服务器，因此不要错误输入中继服务器的登录/密码。成功登录后，你就在家庭服务器上了。</p>
<p><a id="3_3810" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_3">通过反向 SSH 隧道直接连接到网络地址变换后的服务器</h3>
<p>上面的方法允许你访问 NAT 后面的 <strong>家庭服务器</strong>，但你需要登录两次：首先登录到 <strong>中继服务器</strong>，然后再登录到<strong>家庭服务器</strong>。这是因为中继服务器上 SSH 隧道的端点绑定到了回环地址（127.0.0.1）。</p>
<p>事实上，有一种方法可以只需要登录到中继服务器就能直接访问NAT之后的家庭服务器。要做到这点，你需要让中继服务器上的 sshd 不仅转发回环地址上的端口，还要转发外部主机的端口。这通过指定中继服务器上运行的 sshd 的 <strong>GatewayPorts</strong> 实现。</p>
<p>打开<strong>中继服务器</strong>的 /etc/ssh/sshd_conf 并添加下面的行。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">vi</span> <span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="kwd">ssh</span><span class="pun">/</span><span class="pln">sshd_conf</span></code></li>
</ol>
<hr />
<ol class="linenums">
<li class="L0"><code><span class="typ">GatewayPorts</span><span class="pln"> clientspecified</span></code></li>
</ol>
<p>重启 sshd。</p>
<p>基于 Debian 的系统：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">sudo</span> <span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="kwd">init</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="kwd">ssh</span><span class="pln"> restart</span></code></li>
</ol>
<p>基于红帽的系统：</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">sudo</span> <span class="kwd">systemctl</span><span class="pln"> restart </span><span class="kwd">sshd</span></code></li>
</ol>
<p>现在在家庭服务器中按照下面方式初始化一个反向 SSH 隧道。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">homeserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">ssh</span> <span class="pun">-</span><span class="pln">fN </span><span class="pun">-</span><span class="pln">R </span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">:</span><span class="lit">10022</span><span class="pun">:</span><span class="pln">localhost</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> relayserver_user@1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1</span></code></li>
</ol>
<p>登录到中继服务器然后用 netstat 命令确认成功建立的一个反向 SSH 隧道。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">relayserver</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">sudo</span> <span class="kwd">netstat</span> <span class="pun">-</span><span class="pln">nap </span><span class="pun">|</span> <span class="kwd">grep</span> <span class="lit">10022</span></code></li>
</ol>
<hr />
<ol class="linenums">
<li class="L0"><code><span class="pln">tcp </span><span class="lit">0</span> <span class="lit">0</span> <span class="lit">1.1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">:</span><span class="lit">10022</span> <span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:*</span><span class="pln"> LISTEN </span><span class="lit">1538</span><span class="pun">/</span><span class="kwd">sshd</span><span class="pun">:</span><span class="pln"> dev </span></code></li>
</ol>
<p>不像之前的情况，现在隧道的端点是 1.1.1.1:10022（中继服务器的公网 IP 地址），而不是 127.0.0.1:10022。这就意味着从外部主机可以访问隧道的另一端。</p>
<p>现在在任何其它计算机（客户端计算机），输入以下命令访问网络地址变换之后的家庭服务器。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">clientcomputer</span><span class="pun">~</span><span class="pln">$ </span><span class="kwd">ssh</span> <span class="pun">-</span><span class="pln">p </span><span class="lit">10022</span><span class="pln"> homeserver_user@1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1</span></code></li>
</ol>
<p>在上面的命令中，1.1.1.1 是中继服务器的公共 IP 地址，homeserver_user必须是家庭服务器上的用户账户。这是因为你真正登录到的主机是家庭服务器，而不是中继服务器。后者只是中继你的 SSH 流量到家庭服务器。</p>
<p><a id="3_6437" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_4">在 Linux 上设置一个永久反向 SSH 隧道</h3>
<p>现在你已经明白了怎样创建一个反向 SSH 隧道，然后把隧道设置为 “永久”，这样隧道启动后就会一直运行（不管临时的网络拥塞、SSH 超时、中继主机重启，等等）。毕竟，如果隧道不是一直有效，你就不能可靠的登录到你的家庭服务器。</p>
<p>对于永久隧道，我打算使用一个叫 autossh 的工具。正如名字暗示的，这个程序可以让你的 SSH 会话无论因为什么原因中断都会自动重连。因此对于保持一个反向 SSH 隧道非常有用。</p>
<p>第一步，我们要设置从家庭服务器到中继服务器的<a href="https://linux.cn/article-5444-1.html">无密码 SSH 登录</a>。这样的话，autossh 可以不需要用户干预就能重启一个损坏的反向 SSH 隧道。</p>
<p>下一步，在建立隧道的家庭服务器上<a href="https://linux.cn/article-5459-1.html">安装 autossh</a>。</p>
<p>在家庭服务器上，用下面的参数运行 autossh 来创建一个连接到中继服务器的永久 SSH 隧道。</p>
<ol class="linenums">
<li class="L0"><code><span class="pln">homeserver</span><span class="pun">~</span><span class="pln">$ autossh </span><span class="pun">-</span><span class="pln">M </span><span class="lit">10900</span> <span class="pun">-</span><span class="pln">fN </span><span class="pun">-</span><span class="pln">o </span><span class="str">"PubkeyAuthentication=yes"</span> <span class="pun">-</span><span class="pln">o </span><span class="str">"StrictHostKeyChecking=false"</span> <span class="pun">-</span><span class="pln">o </span><span class="str">"PasswordAuthentication=no"</span> <span class="pun">-</span><span class="pln">o </span><span class="str">"ServerAliveInterval 60"</span> <span class="pun">-</span><span class="pln">o </span><span class="str">"ServerAliveCountMax 3"</span> <span class="pun">-</span><span class="pln">R </span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">:</span><span class="lit">10022</span><span class="pun">:</span><span class="pln">localhost</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> relayserver_user@1</span><span class="pun">.</span><span class="lit">1.1</span><span class="pun">.</span><span class="lit">1</span></code></li>
</ol>
<p>“-M 10900” 选项指定中继服务器上的监视端口，用于交换监视 SSH 会话的测试数据。中继服务器上的其它程序不能使用这个端口。</p>
<p>“-fN” 选项传递给 ssh 命令，让 SSH 隧道在后台运行。</p>
<p>“-o XXXX” 选项让 ssh：</p>
<ul>
<li>使用密钥验证，而不是密码验证。</li>
<li>自动接受（未知）SSH 主机密钥。</li>
<li>每 60 秒交换 keep-alive 消息。</li>
<li>没有收到任何响应时最多发送 3 条 keep-alive 消息。</li>
</ul>
<p>其余 SSH 隧道相关的选项和之前介绍的一样。</p>
<p>如果你想系统启动时自动运行 SSH 隧道，你可以将上面的 autossh 命令添加到 /etc/rc.local。</p>
<p><a id="3_8639" class="target-fix ext" target="_blank" rel="external nofollow"></a></p>
<h3 id="toc_5">总结</h3>
<p>在这篇博文中，我介绍了你如何能从外部通过反向 SSH 隧道访问限制性防火墙或 NAT 网关之后的 Linux 服务器。这里我介绍了家庭网络中的一个使用事例，但在企业网络中使用时你尤其要小心。这样的一个隧道可能被视为违反公司政策，因为它绕过了企业的防火墙并 把企业网络暴露给外部攻击。这很可能被误用或者滥用。因此在使用之前一定要记住它的作用。</p>
<hr />
<p>via: <a class="ext" href="http://xmodulo.com/access-linux-server-behind-nat-reverse-ssh-tunnel.html" target="_blank" rel="external nofollow">http://xmodulo.com/access-linux-server-behind-nat-reverse-ssh-tunnel.html</a></p>
<p>作者：<a class="ext" href="http://xmodulo.com/author/nanni" target="_blank" rel="external nofollow">Dan Nanni</a> 译者：<a class="ext" href="https://github.com/ictlyh" target="_blank" rel="external nofollow">ictlyh</a> 校对：<a class="ext" href="https://github.com/wxy" target="_blank" rel="external nofollow">wxy</a></p>
<p>本文由 <a class="ext" href="https://github.com/LCTT/TranslateProject" target="_blank" rel="external nofollow">LCTT</a> 原创翻译，<a href="https://linux.cn/article-5975-1.html">Linux中国</a> 荣誉推出</p>
</div>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>如何设置 Linux 上 SSH 登录的 Email 提醒</title>
		<link>https://www.bhzhu203.com/2016/04/28/%e5%a6%82%e4%bd%95%e8%ae%be%e7%bd%ae-linux-%e4%b8%8a-ssh-%e7%99%bb%e5%bd%95%e7%9a%84-email-%e6%8f%90%e9%86%92/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 07:44:58 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[LCTT]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=186</guid>

					<description><![CDATA[2015-4-26 11:01&#124; 查看: 635&#124; 评论: 1&#124; 收藏: 6&#124;  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>2015-4-26 11:01| 查看: 635| 评论: 1| 收藏: 6| 分享: 0</p>
<p>原文：http://www.ehowstuff.com/how-to-get-email-alerts-for-ssh-login-on-linux-server/ 作者： skytech<br />
译文：LCTT <a href="http://linux.cn/article-5334-1.html" target="_blank">http://linux.cn/article-5334-1.html</a> 译者： theo-l</p>
<p>虚拟私有服务器 （VPS）上启用 SSH 服务使得该服务器暴露到互联网中，为黑客攻击提供了机会，尤其是当 VPS 还允许root 直接访问时。VPS 应该为每次 SSH 登录成功尝试配置一个自动的 email 警告。 VPS 服务器的所有者会得到各种 SSH 服务器访问日志的通知，例如登录者、登录时间以及来源 IP 地址等信息。这是一个对于服务器拥有者来说，保护服务器避免未知登录尝试的重要安全关注点。这是因为如果黑客使用暴力破解方式通过 SSH 来登录到你的 VPS 的话，后果很严重。在本文中，我会解释如何在 CentOS 6、 CentOS 7、 RHEL 6 和 RHEL 7上为所有的 SSH 用户登录设置一个 email 警告。</p>
<p>使用root用户登录到你的服务器；</p>
<p>在全局源定义处配置警告（/etc/bashrc），这样就会对 root 用户以及普通用户都生效：</p>
<p>[root@vps ~]# vi /etc/bashrc</p>
<p>将下面的内容加入到上述文件的尾部。</p>
<p>echo &#8216;ALERT &#8211; Root Shell Access (vps.ehowstuff.com) on:&#8217; `date` `who` | mail -s &#8220;Alert: Root Access from `who | cut -d'(&#8216; -f2 | cut -d&#8217;)&#8217; -f1`&#8221; recipient@gmail.com</p>
<p>你也可以选择性地让警告只对 root 用户生效：</p>
<p>[root@vps ~]# vi .bashrc</p>
<p>将下面的内容添加到/root/.bashrc的尾部：</p>
<p>echo &#8216;ALERT &#8211; Root Shell Access (vps.ehowstuff.com) on:&#8217; `date` `who` | mail -s &#8220;Alert: Root Access from `who | cut -d'(&#8216; -f2 | cut -d&#8217;)&#8217; -f1`&#8221; recipient@gmail.com</p>
<p>整个配置文件样例：</p>
<p># .bashrc<br />
# User specific aliases and functions<br />
alias rm=&#8217;rm -i&#8217;<br />
alias cp=&#8217;cp -i&#8217;<br />
alias mv=&#8217;mv -i&#8217;<br />
# Source global definitions<br />
if [ -f /etc/bashrc ]; then<br />
. /etc/bashrc<br />
fi<br />
echo &#8216;ALERT &#8211; Root Shell Access (vps.ehowstuff.com) on:&#8217; `date` `who` | mail -s &#8220;Alert: Root Access from `who | cut -d'(&#8216; -f2 | cut -d&#8217;)&#8217; -f1`&#8221; recipient@gmail.com</p>
<p>你也可以选择性地让警告只对特定的普通用户生效（例如 skytech）：</p>
<p>[root@vps ~]# vi /home/skytech/.bashrc</p>
<p>将下面的内容加入到/home/skytech/.bashrc文件尾部：</p>
<p>echo &#8216;ALERT &#8211; Root Shell Access (vps.ehowstuff.com) on:&#8217; `date` `who` | mail -s &#8220;Alert: Root Access from `who | cut -d'(&#8216; -f2 | cut -d&#8217;)&#8217; -f1`&#8221; recipient@gmail.com</p>
<p>via: <a href="http://www.ehowstuff.com/how-to-get-email-alerts-for-ssh-login-on-linux-server/" target="_blank">http://www.ehowstuff.com/how-to-get-email-alerts-for-ssh-login-on-linux-server/</a></p>
<p>作者：skytech 译者：theo-l 校对：wxy</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSH+Git Server on Windows &#8211; 在Windows下搭建Git服务器</title>
		<link>https://www.bhzhu203.com/2016/04/28/sshgit-server-on-windows-%e5%9c%a8windows%e4%b8%8b%e6%90%ad%e5%bb%bagit%e6%9c%8d%e5%8a%a1%e5%99%a8/</link>
		
		<dc:creator><![CDATA[bhzhu203]]></dc:creator>
		<pubDate>Thu, 28 Apr 2016 06:25:15 +0000</pubDate>
				<category><![CDATA[linux知识]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.bhzhu203.com/?p=120</guid>

					<description><![CDATA[Git是为Linux Kernel开发而设计的版本控制系统，因此其与Linux的 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Git是为Linux Kernel开发而设计的版本控制系统，因此其与Linux的结合非常紧密。这使得它在Linux下使用起来非常方便。但是对于习惯Windows的人就 不那么友好了。虽然目前也有msys-git和TortorseGit这样的项目，使得在Windows上使用Git变得越来越方便。但目前一个明显的缺 陷就是要把自己的版本库共享给其他人时，很不方便。</p>
<p>在Linux下，由于有完美的SSH支持，因此clone远程机器的版本库只要：</p>
<p>git clone user@remote.server.address:path/to/repo local_dir</p>
<p>就可以轻松搞定。那么可以在Windows上配置好SSH，然后用和Linux下一样的方式来使用git吗？</p>
<p>可以的: 首先，需要安装两个工具：<br />
1 &#8211; Git，Windows下的Git，还是<a href="http://code.google.com/p/msysgit/" target="_blank">msys-git</a>比较好。<br />
2 &#8211; SSH，可以用<a href="http://www.itefix.no/i2/copssh" target="_blank">CopSSH</a>，可以在Windows上启动SSH服务而不仅是客户端。</p>
<p>安 装这两个工具的过程没有什么难度。这里假定Git是安装在C:Git目录下，CopSSH安装在C:ICW目录下。那么当你安装好以后，git已经可 以从远程得到版本库，SSH也有一个用户可以登录了。假定这个用户是git（CopSSH默认没有任何用户可以登录，需要手动激活一个设好密码的 Windows用户）。</p>
<p>这时，从其它机器用git用户通过ssh登录以后，可以执行ls，cd等基本命令。但是git任然不能运行。所以，也就还不能通过这个ssh来发布git版本库了。要实现这个，需要做一些设置。</p>
<p>首 先、需要在Git的安装目录里找到cmd目录，这里就是C:Gitcmd了。在里面创建如下几个文件：  git git-upload-pack git-upload-archive git-receive-pack。这里都没有扩展名的，主要是给登录后，由bash执行的。每个文件都只有一行，分别是：<br />
git里写  git.cmd $*<br />
git-upload-pack里写  git upload-pack $*<br />
git-upload-archive里写  git upload-archive $*<br />
git-receive-pack里写  git receive-pack $*</p>
<p>然后，就要给登录后的用户添加path了，保证上面添加的命令可以找到，并执行。找到CopSSH安装目录的etc下的profile文件。这里就是C:ICWetcprofile了：在文件最后添加两行</p>
<p>gitpath=`/bin/cygpath C:/Git/cmd`  #这里不是引号，路径是Git下的cmd，斜杠也要用Unix的习惯<br />
export PATH=&#8221;$PATH:$gitpath&#8221;</p>
<p>然后，用git用户重新从SSH登录。就可以使用git命令了。<br />
例如创建一个测试库：<br />
mkdir testgit<br />
cd testgit<br />
git init<br />
touch a b c<br />
git add .<br />
git commit -m &#8220;init&#8221;<br />
然后，就可以在远程clone这个库了。假定这台机器的ip是192.168.1.1。在另外一台机器上，<br />
git clone git@192.168.1.1:testgit testgit<br />
就可以clone成功了。这样Windows下的Git+SSH服务就做成功了！</p>
<p>最后，说明一下目前知道的限制：<br />
1）不能用link，也就是所有的文件必须放在git用户的home下。这个home的位置在 C:ICWhomegit。</p>
<p>2）clone时不能用绝对路径，只能写相对于git用户home的相对路径。</p>
<p><a href="http://hi.baidu.com/fmzhangyi/item/677105dd9d96f8dd241f4019" target="_blank">http://hi.baidu.com/fmzhangyi/item/677105dd9d96f8dd241f4019</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
