<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>不羁月人</title><link>https://mail.moonman.cool/</link><description>无用之用，方为大用</description><item><title>RabbitMQ报错Error: unable to connect to node rabbit@xxx: nodedown的解决方式</title><link>https://mail.moonman.cool/post/6.html</link><description>&lt;p&gt;环境：Win10x64+erlang_otp_19.1x64+RabbitMQ3.6.6&lt;/p&gt;&lt;p&gt;刚开始研究RabbitMQ，就遇到问题：&lt;/p&gt;&lt;p&gt;安装好之后，按照&lt;a href=&quot;http://www.rabbitmq.com/install-windows.html&quot; target=&quot;_blank&quot;&gt;官方安装向导&lt;/a&gt;执行&lt;em&gt;rabbitmqctl status&lt;/em&gt;命令检查状态时，报如下错误：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;Status&amp;nbsp;of&amp;nbsp;node&amp;nbsp;&amp;#39;rabbit@DESKTOP-RVK1IHE&amp;#39;&amp;nbsp;...
Error:&amp;nbsp;unable&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;node&amp;nbsp;&amp;#39;rabbit@DESKTOP-RVK1IHE&amp;#39;:&amp;nbsp;nodedown
DIAGNOSTICS
===========
attempted&amp;nbsp;to&amp;nbsp;contact:&amp;nbsp;[&amp;#39;rabbit@DESKTOP-RVK1IHE&amp;#39;]
rabbit@DESKTOP-RVK1IHE:
&amp;nbsp;&amp;nbsp;*&amp;nbsp;connected&amp;nbsp;to&amp;nbsp;epmd&amp;nbsp;(port&amp;nbsp;4369)&amp;nbsp;on&amp;nbsp;DESKTOP-RVK1IHE
&amp;nbsp;&amp;nbsp;*&amp;nbsp;epmd&amp;nbsp;reports&amp;nbsp;node&amp;nbsp;&amp;#39;rabbit&amp;#39;&amp;nbsp;running&amp;nbsp;on&amp;nbsp;port&amp;nbsp;25672
&amp;nbsp;&amp;nbsp;*&amp;nbsp;TCP&amp;nbsp;connection&amp;nbsp;succeeded&amp;nbsp;but&amp;nbsp;Erlang&amp;nbsp;distribution&amp;nbsp;failed
&amp;nbsp;&amp;nbsp;*&amp;nbsp;Authentication&amp;nbsp;failed&amp;nbsp;(rejected&amp;nbsp;by&amp;nbsp;the&amp;nbsp;remote&amp;nbsp;node),&amp;nbsp;please&amp;nbsp;check&amp;nbsp;the&amp;nbsp;Erlang&amp;nbsp;cookie
current&amp;nbsp;node&amp;nbsp;details:
-&amp;nbsp;node&amp;nbsp;name:&amp;nbsp;&amp;#39;rabbitmq-cli-22@DESKTOP-RVK1IHE&amp;#39;
-&amp;nbsp;home&amp;nbsp;dir:&amp;nbsp;C:\Users\TNT
-&amp;nbsp;cookie&amp;nbsp;hash:&amp;nbsp;oVa+k73FyoNB9z87SvbEAQ==&lt;/pre&gt;&lt;p&gt;根据提示，应该是Erlang的cookie出现问题。谷歌后找到了两种解决方式（还有集群的解决方案，这里无关就不阐述了）：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、重新安装RabbitMQ的服务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;For some reason the service set up by the installer did not configure several registry entries. Running this set them correctly and allowed the service to run.&lt;/p&gt;&lt;p&gt;这是由于某些原因在安装服务时没有正确配置注册项，重新安装服务即可解决：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;以管理员身份运行&lt;em&gt;RabbitMQ Command Propmt&lt;/em&gt;（开始菜单中）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;执行&lt;em&gt;rabbitmq-service remove&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;执行&lt;em&gt;rabbitmq-service install&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;然后再测试是否成功。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、更正Erlang的cookie&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Erlang会生成两个cookie文件：C:\Windows\.erlang.cookie 及 C:\用户\你的用户名\.erlang.cookie。检查两个文件内容是否一致，不一致用其中一个替换另一个即可。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;我这里用第二种方式解决了问题，正如程序提示是cookie不正确所导致。&lt;/p&gt;&lt;p&gt;目前还不清楚为何会这样，网上查阅的资料很多都是集群才会出现这种情况，可能是bug，有待探究。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;参考：http://stackoverflow.com/questions/28258392/rabbitmq-has-nodedown-error&lt;/p&gt;</description><pubDate>Wed, 23 Nov 2016 21:43:47 +0800</pubDate></item><item><title>Fedora 17/18 之 JDK7安装和配置</title><link>https://mail.moonman.cool/post/4.html</link><description>&lt;h3&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Fedora自带的openjdk很多时候不符合要求，所以JDK的安装和配置是必须的操作，整理一下备忘。

P.S.1.这里以jdk-7u11-linux-x64为例。
P.S.2.经Fedora17/18测试成功。

&amp;nbsp;&lt;/p&gt;&lt;!--more--&gt;&lt;h3&gt;&lt;strong&gt;安装JDK&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;# 0. 下载JDK：&lt;a title=&quot;官网&quot; href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot; target=&quot;_blank&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;&lt;p&gt;# 1. 切换到root用户&lt;code&gt;su&lt;/code&gt;&lt;/p&gt;&lt;p&gt;# 2. 安装JDK&lt;/p&gt;&lt;p&gt;&lt;code&gt;#32位&amp;nbsp;&lt;/code&gt;&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;rpm&amp;nbsp;-Uvh&amp;nbsp;/your/path/jdk-7u11-linux-i586.rpm&lt;/pre&gt;&lt;p&gt;&lt;code&gt;#64位&amp;nbsp;&lt;/code&gt;&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;rpm&amp;nbsp;-Uvh&amp;nbsp;/your/path/jdk-7u11-linux-x64.rpm&lt;/pre&gt;&lt;p&gt;# 3. 安装java, javac, javaws 和 libjavaplugin.so&amp;nbsp;&lt;/p&gt;&lt;p&gt;## (1) java ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/java&amp;nbsp;java&amp;nbsp;/usr/java/latest/jre/bin/java&amp;nbsp;20000&lt;/pre&gt;&lt;p&gt;## (2) javac ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/javac&amp;nbsp;javac&amp;nbsp;/usr/java/latest/bin/javac&amp;nbsp;20000&amp;nbsp;
alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/jar&amp;nbsp;jar&amp;nbsp;/usr/java/latest/bin/jar&amp;nbsp;20000&lt;/pre&gt;&lt;p&gt;## (3) javaws ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/bin/javaws&amp;nbsp;javaws&amp;nbsp;/usr/java/latest/jre/bin/javaws&amp;nbsp;20000&lt;/pre&gt;&lt;p&gt;## (4-1) Firefox浏览器Java插件32位 ##&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/lib/mozilla/plugins/libjavaplugin.so&amp;nbsp;libjavaplugin.so&amp;nbsp;/usr/java/latest/jre/lib/i386/libnpjp2.so&amp;nbsp;20000&lt;/pre&gt;&lt;p&gt;## (4-2) Firefox浏览器Java插件64位 ##&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--install&amp;nbsp;/usr/lib64/mozilla/plugins/libjavaplugin.so&amp;nbsp;libjavaplugin.so.x86_64&amp;nbsp;/usr/java/latest/jre/lib/amd64/libnpjp2.so&amp;nbsp;20000&lt;/pre&gt;&lt;p&gt;# 4. 检查java, javac, javaws 和 libjavaplugin.so 的版本，看是否安装成功&amp;nbsp;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;## (1) java ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;java&amp;nbsp;-version&lt;/pre&gt;&lt;p&gt;#输出类似于下面&lt;br/&gt;&lt;/p&gt;&lt;blockquote&gt;java version &amp;quot;1.7.0_11&amp;quot;
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)&lt;/blockquote&gt;&lt;p&gt;## (2) javac ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;javac&amp;nbsp;-version&lt;/pre&gt;&lt;p&gt;#输出类似于下面&lt;br/&gt;&lt;/p&gt;&lt;blockquote&gt;javac 1.7.0_11&lt;/blockquote&gt;&lt;p&gt;## (3) javaws ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;javaws&lt;/pre&gt;&lt;p&gt;#输出类似于下面&lt;/p&gt;&lt;blockquote&gt;Java(TM) Web Start 10.11.2.21-fcs&lt;/blockquote&gt;&lt;p&gt;## (4) libjavaplugin.so ##&amp;nbsp;&lt;/p&gt;&lt;p&gt;#重启浏览器，然后 [Ctrl + Shift + A] 打开插件页面，切换到 [Plugins] 标签，查看java plugin是否是正确的版本#&amp;nbsp;&lt;/p&gt;&lt;p&gt;5. 切换java, javac, javaws 和 libjavaplugin.so 的版本&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;alternatives&amp;nbsp;--config&amp;nbsp;java
alternatives&amp;nbsp;--config&amp;nbsp;javac&amp;nbsp;
alternatives&amp;nbsp;--config&amp;nbsp;javaws
alternatives&amp;nbsp;--config&amp;nbsp;libjavaplugin.so&amp;nbsp;
alternatives&amp;nbsp;--config&amp;nbsp;libjavaplugin.so.x86_64&lt;/pre&gt;&lt;h3&gt;&amp;nbsp;&lt;strong&gt;配置JDK环境变量&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;考虑到JDK经常被使用，所以这里设置为全局环境变量。&amp;nbsp;&lt;/p&gt;&lt;p&gt;# 1. 切换到root用户&lt;code&gt;su&lt;/code&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;# 2. 添加java.sh到profile.d中，以免直接编辑profile带来隐患&amp;nbsp;&lt;/p&gt;&lt;p&gt;## (1) 新建java.sh ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;vi&amp;nbsp;/etc/profile.d/java.sh&lt;/pre&gt;&lt;p&gt;## (2) 添加以下内容 ##&lt;br/&gt;&lt;/p&gt;&lt;blockquote&gt;JAVA_HOME=/usr/java/latest/
CLASSPATH=.：$JAVA_HOME/lib/tools.jar：$JAVA_HOME/lib.dt.jar
PATH=$JAVA_HOME/bin：$PATH
export JAVA_HOME CLASSPATH PATH JAVA_OPTS CATALINA_OPTS&lt;/blockquote&gt;&lt;p&gt;## (3) 更改权限 ##&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;chmod&amp;nbsp;755&amp;nbsp;/etc/profile.d/java.sh&lt;/pre&gt;&lt;p&gt;&amp;nbsp;# 3. 执行命令&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;source&amp;nbsp;/etc/profile
source&amp;nbsp;/etc/profile.d/java.sh&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 23 Jan 2013 21:18:48 +0800</pubDate></item><item><title>Fedora 17/18 之 SSH基本配置及无密码（密钥验证）登录配置</title><link>https://mail.moonman.cool/post/3.html</link><description>&lt;h2&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;最近因为毕设需要搭建Hadoop，理所当然的要用到SSH无密码登录了，其实就是用公私钥认证的方式进行登录。
不久前曾在Fedora17上测试成功，结果因为一些细节上的问题，昨天在Fedora18的时候配了大半天都没成功，还以为是新版本Fedora的问题=。=
多方查阅资料后，直到凌晨才配置成功…这里就整理一篇综合的SSH配置文章，巩固一下记忆。&amp;nbsp;&lt;/p&gt;&lt;p&gt;P.S.1.本文为单机本地访问，多机远程访问操作类似。&amp;nbsp;&lt;/p&gt;&lt;p&gt;P.S.2.本文在Fedora17和18下测试成功。&lt;/p&gt;&lt;!--more--&gt;&lt;h2&gt;&lt;strong&gt;SSH基本配置&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;首先安装openssh-server和openssh-clients，执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;sudo yum install openssh-server openssh-clients&lt;/code&gt;&lt;/p&gt;&lt;p&gt;然后配置SSH服务器配置文件sshd_config，执行如下命令：&amp;nbsp;&lt;/p&gt;&lt;p&gt;sudo vi /etc/ssh/sshd_config&amp;nbsp;&lt;/p&gt;&lt;p&gt;将下面各行前的注释符#(如果有的话)去掉：&lt;/p&gt;&lt;blockquote&gt;Port 22
Protocol 2
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys&lt;/blockquote&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;Port 22为SSH端口&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Protocol 2为使用协议2&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;RSAAuthentication yes为使用RSA验证&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;PubkeyAuthentication yes为使用公钥验证&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AuthorizedKeysFile .ssh/authorized_keys为指定验证公钥文件所在的路径
&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;昨天就是最后三行没去掉注释才导致无法公钥验证，只能用密码登录…

还有一些常用的选项，下面简单介绍一下：
PermitRootLogin #是否允许root用户登录，为了安全，一般都设置为no&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;MaxAuthTries #最大验证尝试次数，默认为6，为防止暴力破解，一般设置更小的值&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;MaxSessions #最大连接数，就是允许连接的客户端数量，这个视情况而定了&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;PermitEmptyPasswords #是否允许使用空密码，为了安全一般设置no，不过既然用密钥验证的话，这个意义就不太大了吧&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;接下来启动SSH，执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;sudo systemctl restart sshd.service
或
sudo service sshd restart&lt;/code&gt;&lt;/p&gt;&lt;p&gt;服务器配置完毕，到客户端配置。如果只是单机本地访问的话不配置也能正常访问。&amp;nbsp;&lt;/p&gt;&lt;p&gt;修改客户端配置文件ssh_config（注意，是ssh_config而不是sshd_config，前者是客户端配置文件，后者是服务端的配置文件），执行如下命令：&amp;nbsp;&lt;/p&gt;&lt;p&gt;sudo vi /etc/ssh/ssh_config&amp;nbsp;&lt;/p&gt;&lt;p&gt;将下面各行前的注释符#去掉（如果有的话）：&lt;/p&gt;&lt;blockquote&gt;Port 22
Protocol 2,1&lt;/blockquote&gt;&lt;p&gt;这样就可以了。&amp;nbsp;&lt;/p&gt;&lt;p&gt;在SSH访问测试之前，还要对防火墙进行设置，允许SSH端口被访问。这里有两种方法：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;方法一&lt;/strong&gt;.执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;方法二&lt;/strong&gt;.执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;sudo vi /etc/sysconfig/iptables&lt;/code&gt;&lt;/p&gt;&lt;p&gt;在文件内追加：&lt;/p&gt;&lt;blockquote&gt;-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT&lt;/blockquote&gt;&lt;p&gt;然后测试SSH访问，执行如下命令（ssh后的是目标主机地址，这里是本地测试所以用localhost）：&lt;/p&gt;&lt;p&gt;&lt;code&gt;ssh localhost&lt;/code&gt;&lt;/p&gt;&lt;p&gt;首次连接会提示站点未知，问你是否要继续连接，这里键入yes。接着会提示输入密码，输入用户密码(输入的密码不会显示)后回车，出现类似下面的信息的话即登录成功：&lt;/p&gt;&lt;blockquote&gt;Last login: Wed Jan 23 15:52:55 2013&lt;/blockquote&gt;&lt;p&gt;至此，SSH基本配置完毕。&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;SSH密钥验证无密码登录配置&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;上面的配置在每次访问时都要键入密码，很不方便。只要通过使用密钥验证的方式，就可以避免输入密码的繁琐性。

至于验证原理这里就不赘述了，自行去充电吧。简单举个例子：A想通过SSH访问B，即A是客户端，B是服务器，那么就需要A生成密钥对，然后将公钥提供给B，在每次登录验证的时候，B会使用A的公钥随机生成一个加密的密码发给A，A用自己的私钥解密后将解密的密码回发给B，B验证通过后A就登录成功了。
&amp;nbsp;&lt;/p&gt;&lt;p&gt;所以首先是客户端生成密钥对，键入如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;ssh-keygen -t dsa -P &amp;#39;&amp;#39; -f ~/.ssh/id_dsa&lt;/code&gt;上&lt;/p&gt;&lt;p&gt;面的dsa可用rsa替代，两者是不同的加密方式。生成的密钥对将存放在home目录的.ssh隐藏目录下，id_dsa.pub是公钥，id_dsa是私钥。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;然后将公钥发给服务器并追加到authorized_keys文件中，执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;cat ~/.ssh/id_dsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;/code&gt;&lt;/p&gt;&lt;p&gt;由于这里是本地测试，所以authorized_keys文件路径不变，如果是远程访问的话，可以使用scp命令进行公钥传送，scp使用方法清自行查找资料。
&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后有一点很重要，就是authorized_keys文件的权限，由于RSA对文件权限十分敏感，所以必须对文件进行权限设置。执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;chmod 600 ~/.ssh/authorized_keys&lt;/code&gt;&lt;/p&gt;&lt;p&gt;权限可以是600或者644，如果漏了这点的话就无法使用密钥验证了。

测试无密码登录，执行如下命令：&lt;/p&gt;&lt;p&gt;&lt;code&gt;ssh localhost&lt;/code&gt;&lt;/p&gt;&lt;p&gt;这时就不会提示输入密码，直接登录成功了。

以上配置完毕。&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;结语&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;配这个SSH真心花了太多时间，但因此也学到了不少东西。在配置的时候主要注意几点：服务端配置文件的配置、防火墙配置、authorized_keys文件权限设置。&lt;/p&gt;&lt;p&gt;一句总结，果真细节决定成败。&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面是一篇对我很有用的文章里的一部分——SSH调试步骤，转过来备忘，感谢原作者。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;以下内容转自：&lt;em&gt;忘了&lt;/em&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;用ssh -v 显示详细的登陆信息查找原因：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;$ ssh -v localhost&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;回车显示了详细的登陆信息如下：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;。。。。。。省略&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Authentications that can continue: publickey,gssapi-with-mic,password&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Next authentication method: gssapi-with-mic&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Unspecified GSS failure. Minor code may provide more information
Unknown code krb5 195&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Unspecified GSS failure. Minor code may provide more information
Unknown code krb5 195&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Unspecified GSS failure. Minor code may provide more information
Unknown code krb5 195&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Next authentication method: publickey&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Trying private key: /home/huaxia/.ssh/identity&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Trying private key: /home/huaxia/.ssh/id_rsa&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Offering public key: /home/huaxia/.ssh/id_dsa&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Authentications that can continue: publickey,gssapi-with-mic,password&amp;nbsp;&lt;/p&gt;&lt;p&gt;debug1: Next authentication method: password
huaxia@localhost&amp;#39;s password:&amp;nbsp;&lt;br/&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;同时用root用户登陆查看系统的日志文件：&amp;nbsp;&lt;/p&gt;&lt;p&gt;$tail /var/log/secure -n 20&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;。。。。。。省略&amp;nbsp;&lt;/p&gt;&lt;p&gt;Jul 13 11:21:05 shnap sshd[3955]: Accepted password for huaxia from 192.168.8.253 port 51837 ssh2&amp;nbsp;&lt;/p&gt;&lt;p&gt;Jul 13 11:21:05 shnap sshd[3955]: pam_unix(sshd:session): session opened for user huaxia by (uid=0)&amp;nbsp;&lt;/p&gt;&lt;p&gt;Jul 13 11:21:47 shnap sshd[4024]: Connection closed by 127.0.0.1&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Jul 13 11:25:28 shnap sshd[4150]: Authentication refused: bad ownership or modes for file /home/huaxia/.ssh/authorized_keys&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt; Jul 13 11:25:28 shnap sshd[4150]: Authentication refused: bad ownership or modes for file /home/huaxia/.ssh/authorized_keys&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Jul 13 11:26:30 shnap sshd[4151]: Connection closed by 127.0.0.1&amp;nbsp;&lt;/p&gt;&lt;p&gt;。。。。。。省略&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;从上面的日志信息中可知文件/home/huaxia/.ssh/authorized_keys 的权限有问题。

查看/home/huaxia/.ssh/ 下文件的详细信息如下：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;$ ls -lh ~/.ssh/&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;pre class=&quot;brush:plain;toolbar:false;&quot;&gt;总计&amp;nbsp;16K&amp;nbsp;
-rw-rw-r--&amp;nbsp;1&amp;nbsp;huaxia&amp;nbsp;huaxia&amp;nbsp;602&amp;nbsp;07-13&amp;nbsp;11:22&amp;nbsp;authorized_keys&amp;nbsp;
-rw-------&amp;nbsp;1&amp;nbsp;huaxia&amp;nbsp;huaxia&amp;nbsp;672&amp;nbsp;07-13&amp;nbsp;11:22&amp;nbsp;id_dsa&amp;nbsp;
-rw-r--r--&amp;nbsp;1&amp;nbsp;huaxia&amp;nbsp;huaxia&amp;nbsp;602&amp;nbsp;07-13&amp;nbsp;11:22&amp;nbsp;id_dsa.pub&amp;nbsp;
-rw-r--r--&amp;nbsp;1&amp;nbsp;huaxia&amp;nbsp;huaxia&amp;nbsp;391&amp;nbsp;07-13&amp;nbsp;11:21&amp;nbsp;known_hosts&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;修改文件authorized_keys的权限（权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能 ）：&lt;/p&gt;&lt;p&gt;&amp;nbsp;$ chmod 600 ~/.ssh/authorized_keys&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;再次测试登陆如下：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;$ ssh localhost&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;pre class=&quot;brush:plain;toolbar:false&quot;&gt;Last&amp;nbsp;login:&amp;nbsp;Wed&amp;nbsp;Jul&amp;nbsp;13&amp;nbsp;14:04:06&amp;nbsp;2011&amp;nbsp;from&amp;nbsp;192.168.8.253&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;看到这样的信息表示已经成功实现了本机的无密码登陆。&amp;nbsp;&lt;/p&gt;&lt;p&gt;8.认证登陆远程服务器（远程服务器OpenSSH的服务当然要启动）
&amp;nbsp;&lt;/p&gt;&lt;p&gt;拷贝本地生产的key到远程服务器端（两种方法）&amp;nbsp;&lt;/p&gt;&lt;p&gt;方法一：&amp;nbsp;&lt;/p&gt;&lt;p&gt;$cat ~/.ssh/id_rsa.pub | ssh 远程用户名@远程服务器ip &amp;#39;cat - &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;#39;
&amp;nbsp;&lt;/p&gt;&lt;p&gt;方法二：&amp;nbsp;&lt;/p&gt;&lt;p&gt;在本机上执行：&amp;nbsp;&lt;/p&gt;&lt;p&gt;$ scp ~/.ssh/id_dsa.pub michael@192.168.8.148:/home/michael/&amp;nbsp;&lt;/p&gt;&lt;p&gt;登陆远程服务器michael@192.168.8.148 后执行：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;$ cat id_dsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;nbsp;&lt;/p&gt;&lt;p&gt;本机远程登陆192.168.8.148的测试：&amp;nbsp;&lt;/p&gt;&lt;p&gt;$ssh michael@192.168.8.148&amp;nbsp;&lt;/p&gt;&lt;p&gt;Linux michael-VirtualBox 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/

216 packages can be updated.
71 updates are security updates.

New release &amp;#39;natty&amp;#39; available.
Run &amp;#39;do-release-upgrade&amp;#39; to upgrade to it.
&amp;nbsp;&lt;/p&gt;&lt;p&gt;Last login: Wed Jul 13 14:46:37 2011 from michael-virtualbox
michael@michael-VirtualBox:~$&amp;nbsp;&lt;/p&gt;&lt;p&gt;可见已经成功登陆。

如果登陆测试不成功，需要修改远程服务器192.168.8.148上的文件authorized_keys的权限（权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能 ）&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;chmod 600 ~/.ssh/authorized_keys&lt;/p&gt;</description><pubDate>Wed, 23 Jan 2013 20:52:15 +0800</pubDate></item><item><title>JAVA解惑之奇数性</title><link>https://mail.moonman.cool/post/5.html</link><description>&lt;p&gt;有一段时间没写过东西了，由于各种状况。今晚就抽些时间来更新一篇。&amp;nbsp;&lt;/p&gt;&lt;p&gt;如题所示，这次要讨论的是JAVA中关于判断一个数（这里以int为例）是否为奇数的问题。
&amp;nbsp;&lt;/p&gt;&lt;p&gt;首先看以下的代码：&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;brush:java;toolbar:false&quot;&gt;boolean&amp;nbsp;isOddBy1(int&amp;nbsp;i)&amp;nbsp;{
return&amp;nbsp;i&amp;nbsp;%&amp;nbsp;2&amp;nbsp;==&amp;nbsp;1;
}&lt;/pre&gt;&lt;p&gt;当使用0、1、2……等测试时，结果符合期望。这样看起来以上的代码是没错的。的确，在一定程度上来说这个方法具有正确性，但只局限于非负整数，当使用负奇数测试时，会发现结果不符合期望。例如-3的时候会返回false，即判断结果为不是奇数。

稍微有些数学基础的人都明白，负数求余返回的值也是负数。而Java 对取余操作符（%）的定义所产生的后果。该操作符被定义为对于所有的 int 数值 a 和所有的非零 int 数值 b，都满足下面的恒等式：&lt;/p&gt;&lt;pre&gt;&amp;nbsp;(a&amp;nbsp;/&amp;nbsp;b)&amp;nbsp;*&amp;nbsp;b&amp;nbsp;+&amp;nbsp;(a&amp;nbsp;%&amp;nbsp;b)&amp;nbsp;==&amp;nbsp;a&lt;/pre&gt;&lt;p&gt;换句话说，如果你用b整除a，将商乘以b，然后加上余数，那么你就得到了最初的值 a 。该恒等式具有正确的含义，但是当与 Java 的截尾整数整除操作符相结合时，它就意味着：当取余操作返回一个非零的结果时，它与左操作数具有相同的正负符号。

当i为负奇数时，其余数为-1，因此上面的方法将返回false。&lt;/p&gt;&lt;p&gt;这个问题很容易解决，只需与0作判断即可，见下面的代码：&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;brush:java;toolbar:false&quot;&gt;boolean&amp;nbsp;isOddBy0(int&amp;nbsp;i)&amp;nbsp;{
return&amp;nbsp;i&amp;nbsp;%&amp;nbsp;2&amp;nbsp;!=&amp;nbsp;0;
}&lt;/pre&gt;&lt;p&gt;然后测试正负整数和零都能返回期望值。

这个问题看起来很低级，但也是容易犯的错误之一，所以不得不注意。

其实这个问题是出自于《JAVA解惑》，我只是为了加强记忆而操作一遍并以文章的形式发出来。或者你会觉得这有些多余，但脚踏实地也是提高编程能力的关键。&lt;/p&gt;&lt;p&gt;曾经初中的一位老师对我说过，“你像一匹老马，脚踏实地，一步一步向前走”。从今以后我也会继续保持这样的步伐不断迈进。&lt;/p&gt;</description><pubDate>Wed, 21 Mar 2012 07:12:46 +0800</pubDate></item></channel></rss>