2016年3月27日 星期日

在執行 rsh 的時候要怎樣才能不必等遠方指令執行結束就回到 shell?

http://hkbsd.net/www/unixfaq/node27.html

以下這些憑直覺想到的答案都達不到這個效果:
  rsh machine command &
  rsh machine 'command &'
例如, 執行 rsh machine 'sleep 60 &' 這個命令時,我們可以觀察到:rsh 並 不會立刻結束,而是等到遠方的 sleep 命令完成以後才結束,即使我們在遠 方使用背景方式執行此命令。所以要怎樣才能讓 rsh 在 sleep 命令啟動後立 刻結束呢? 答案如下-
如果您在遠端使用csh:
  rsh machine -n 'command >&/dev/null </dev/null &'
如果您在遠端使用 sh:
  rsh machine -n 'command >/dev/null 2>&1 </dev/null &'
為什麼呢?因為 "-n" 會把 rsh 的 stdin 接到 /dev/null,因此您可以在本地 機器以背景方式執行整個 rsh 命令。不管是使用 -n 選項或者在指令結尾使 用 "/dev/null",其效果都是一樣的。此外,在遠端機器使用的輸出入轉向(寫 在單引號內的部份)會讓 rsh 認定此次連線可逕行結束(因為已無其他輸 入資料)。
附註: 任何檔案都可以用於遠端機器的輸出入轉向,而不僅限於 /dev/null。
在許多狀況下,這個複雜的命令當中有很多部份都是非必要的。


如何將遠端的ps結果回傳後顯示process id
rsh 10.1.100.113 -n 'ps -ef | grep fglrun ' < /dev/null | awk ' {print $2} '


2016年3月24日 星期四

ssh 信任关系建立后仍需要输入密码

http://blog.itpub.net/29500582/viewspace-1251139/

ssh 建立信任后,依旧需要密码


原因分析,以及处理步骤:
1  查看 /var/log/secure
,分析问题在何处;检查/var/log/messages

這次問題(2016/03/25):$HOME 權限drwxr-x---

2  查看 /root/.ssh/authorized_keys文件的属性,以及.ssh文件属性   是不是权限过大。.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:

3  修改/etc/ssh/sshd_config文件,  把密码认证关闭, 将认证改为 passwordAuthentication no   重启下sshd。 service sshd restart;

4  执行setenforce 0,暂时关闭selinux



查看selinux状态


1  /usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

    SELinux status:                 enabled
2   getenforce                 ##可以用这个命令检查
关闭selinux:


1  临时关闭(不用重启机器):

   setenforce 0                  ##设置SELinux 成为permissive模式
                                 ##setenforce 1 设置SELinux 成为enforcing模式
2  配置文件修改需要重启机器:
   修改/etc/selinux/config 文件
   将SELINUX=enforcing改为SELINUX=disabled
   重启机器即可

附录:
ssh信任关系建立方法

1 在服务器上,进入当前用户根目录下的隐藏目录 .ssh 命令

cd  ~/.ssh

通过 ls –a 命令观察到

2 生成S服务器的私钥和公钥

ssh-keygen -t rsa

ssh-keygen生成密钥用于信任关系生成

-此时会显示Generating public/private key pair. 并提示生成的公钥私钥文件的存放路径和文件名,默认是放在 /home/username/.ssh/id_rsa 这样的文件里的,通常不用改,回车
然后Enter passphrase(empty for no passphrase): 通常直接回车
Enter same passphrase again: 也直接回车
然后会显式密钥fingerprint生成好的提示,并给出一个RSA加密协议的方框图形。此时在.ssh目录下ls,可以看到生成好的私钥文件id_rsa和公钥文件id_rsa.pub


以下是各种补充说明:

注1:如果此时提示 id_rsaalready exists,Overwrite(y/n) 则说明之前已经有人建好了密钥,此时选择n 忽略本次操作就行,可以直接用之前生成好的文件;当然选y覆盖一下也无妨

注2:公钥用于加密,它是向所有人公开的(pub是公开的单词public的缩写);私钥用于解密,只有密文的接收者持有


3 在Server服务器上加载私钥文件

仍然在.ssh目录下,执行命令:
ssh-add id_rsa
系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了
下面有几个异常情况处理:
–如果系统提示:could not open a connection to your authentication agent
则需要执行一下命令:
ssh-agent bash
然后再执行上述的ssh-add id_rsa命令
–如果系统提示id_rsa: No such file or directory
-这是系统无法找到私钥文件id_rsa,需要看看当前路径是不是不在.ssh目录,或者私钥文件改了名字,例如如果建立的时候改成 aa_rsa,则这边命令中也需要相应改一下
-如果系统提示 command not found,那肯定是你命令敲错字符了
-提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add
-注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下


4 把公钥拷贝至Client服务器上

很简单,例如 scp id_rsa.pub user@10.11.xx.xx:~

5 ssh登录到Client服务器上,然后在Client服务器上,把公钥的内容追加到authorized_keys文件末尾(这个文件也在隐藏文件夹.ssh下,没有的话可以建立,没有关系)

cat id_rsa.pub >> ~/.ssh/authorized_keys

以下是各种补充说明,遇到问题时可以参考

注1:这里不推荐用文件覆盖的方式,有些教程直接scp id_rsa.pub 到Client服务器的authorized_keys文件,会导致之前建的其他信任关系的数据被破坏,追加到末尾是更稳妥的方式
注2: cat 完以后,Client服务器上刚才拷贝过来的id_rsa.pub文件就不需要了,可以删除或移动到其它地方)
注 3:ssh-keygen 命令通过-b参数可以指定生成的密钥文件的长度,如果不指定则默认为1024,如果ssh-keygen –b 4096(最长4096),则加密程度提高,但是生成和验证时间会增加。对一般的应用来说,默认长度已经足够胜任了。如果是rsa加密方式,那么最短长度 为768 byte
注4:authorized_keys文件的权限问题。如果按上述步骤建立关系后,仍然要验证密码,并且没有其他报错,那么需要检查一下authorized_keys文件的权限,需要作下修改: chmod g-w authorized_keys
OK,现在试试在Server端拷贝一个文件到Client服务器,应该无需交互直接就传过去了。
但是此时从Client传数据到Server服务器,仍然是需要密码验证的。如果需要两台服务器间能直接互传数据,则反过来按上述步骤操作一下就可以了


异常情况处理:
–提示 port 22: Connection refused
可能的原因:没有正确安装最新的openssh-server,安装方法如下
sudo apt-get install openssh-server
不支持apt安装的,可以手工下载:
wget http://ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz
–关于目录和文件的权限设置
.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:
chmod 600 id_rsa
否则ssh服务器会拒绝登录


关于ssh_config_sshd_config配置文件:

/etc/ssh/ssh_config:
Host *
选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no
“ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no
“ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否使用口令验证。
FallBackToRsh no
“FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh。
UseRsh no
“UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes
“CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
IdentityFile ~/.ssh/identity
“IdentityFile”设置从哪个文件读取用户的RSA安全验证标识。
Port 22
“Port”设置连接到远程主机的端口。
Cipher blowfish
“Cipher”设置加密用的密码。
EscapeChar ~
“EscapeChar”设置escape字符。


/etc/ssh/sshd_config:
Port 22
“Port”设置sshd监听的端口号。
ListenAddress 192.168.1.1
“ListenAddress”设置sshd服务器绑定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。
LoginGraceTime 600
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。
PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。
X11Forwarding no
“X11Forwarding”设置是否允许X11转发。
PrintMotd yes
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。
LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。
RhostsRSAAuthentication no
“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否允许只有RSA安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否允许口令验证。
PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。
AllowUsers admin
“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。

2016年3月23日 星期三

在 RHEL 安裝 YUM Package Manager 的 安裝步驟

在 RHEL 安裝 YUM Package Manager 的 安裝步驟

  1. wget http://yum.baseurl.org/download/2.0/yum-2.0.8-1.src.rpm
  2. rpmbuild --rebuild yum-2.0.8-1.src.rpm
  3. cd /usr/src/redhat/RPMS/noarch/
  4. rpm -ivh yum-2.0.8-1.noarch.rpm
  5. vim /etc/yum.conf # 將 baseurl 換成下述 (換成台灣 Server)
    baseurl= http://vault.centos.org/4.9/os/x86_64
    baseurl= http://vault.centos.org/4.9/updates/x86_64
  6. yum update # 這樣子就可以用囉~

2016年3月22日 星期二

Rsync + SSH -- 讓 Server 自動異地備援也加密

http://dz.adj.idv.tw/thread-48-1-4.html


一.前言
自從911事件之後...異地備援這個名稱就常聽人提起...不過就是滿少看到大家在討論...剛好這次因為有需要...不得不研究這個東西...順便看看大家都是怎樣實作異地備援的...底下是個人的一點點心得...
這次主要分成三個部份...單向 Trusted SSH Authorized...Rsync...Crontab....姑且不論傳輸速度為何...以及無時差的異地備援...相信這樣的Solutions應該可以滿足一般人的需求吧

二.準備
測試系統: Red Hat Linux 7.3 to Red Hat 7.3 ...
Local 端需要啟動 Rsync...套件 openssh-3.4p1-1

** 假設: A (10.0.0.1) 要對 B (192.168.0.1) 做異地備援
PS:角色定位要明確...當然您要巔倒的來做也行...

參考網站 :
http://www.fanqiang.com/a6/b7/20010908/1305001258_b.html


三.開始實作



1.完成單向Trusted SSH Authorized

我 要 A (10.0.0.1) 要對 B (192.168.0.1) 做異地備援 ...所以我針對 A 讓它使用SSH連到 B 時...不需要輸入密碼...User 是 Root...SSH Version2的版本..首先要先在A(10.0.0.1)產生public/private dsa key pair..

[root@mondeo home]# cd /root/.ssh/
[root@mondeo .ssh]# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): <-- 此處不打passphrase..下次才不會詢問password
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66
root@mondeo.adj.idv.tw

[root@mondeo .ssh]#


這時會在系統下看到兩個檔案...id_dsa與id_dsa.pub 現在要把id_dsa.pub丟到192.168.0.1 並且更名為 authorized_keys2

[root@mondeo .ssh]# scp id_dsa.pub 192.168.0.1:/root/.ssh/authorized_keys2root@192.168.0.1's password:
id_dsa.pub 100% |***************************************************************************| 612 00:00
[root@mondeo .ssh]#

現在您可以執行ssh 192.168.0.1 看看能否登入而不需要輸入密碼...
2.使用rsync 做Remote sync

rsync特性簡介 :
rsync是unix-like系統下的數據鏡像備份工具,從命名上就可以看出來了remote sync。它的特性如下:
1、可以鏡像保存整個目錄樹和文件系統。
2、可以很容易做到保持原來文件的權限、時間等等。
3、無須特殊權限即可安裝。
4、優化的流程,文件傳輸效率高。
5、可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
6、支持匿名傳輸。

首先要先對B(192.168.0.1)把Rsync的Server on起來...

[root@linux /]#chkconfig --list rsync
rsync off
[root@linux /]#chkconfig rsync on


現在我先在A(10.0.0.1)上建一個 Backup directory...然後對B(192.168.0.1)的mysql跟html的目錄做異地備援...偶寫一個簡單的script如下:

[root@mondeo /]# mkdir backup
[root@mondeo backup]#vi sync
rsync -avlR --delete -e ssh 192.168.0.1:/var/lib/mysql /backup/
rsync -avlR --delete -e ssh 192.168.0.1:/var/www/html /backup/

[root@mondeo backup]#chmod 700 sync


參數意義如下﹕
-a, --archive
It is a quick way of saying you want recursion and want to preserve almost everything.
-v, --verbose
This option increases the amount of information you are given during the transfer.
-l, --links
When symlinks are encountered, recreate the symlink on the destination.
-R, --relative
Use relative paths. 保留相對路徑...才不會讓子目錄跟 parent 擠在同一層...
--delete
是指如果Server端刪除了一文件,那客戶端也相應把這一文件刪除,保持真正的一致。
-e ssh
建立起加密的連接。
參數的使用因人而異...您可以man rsync來使用更多的參數...

測試看看:

[root@mondeo backup]# ./syncreceiving file list ... done
.
.
.
done
wrote 16 bytes  read 107 bytes  82.00 bytes/sec
total size is 0  speedup is 0.00
receiving file list ... done
.
.
.
done
wrote 16 bytes  read 921 bytes  624.67 bytes/sec
total size is 308331  speedup is 329.06
[root@mondeo backup]#

看到沒詢問密碼....以及有把檔案copy過來就沒問題囉....當然你可以把遠端的資料做個變動...看是否真有同步啦....

3.使用crontab 來做自動排程

現在設好之後...我希望每天的0點0分...夜深人靜的時後再來幫我做sync....當然您想要多久做 sync 看個人需求囉...

[root@mondeo backup]# crontab -e0 0 * * * /backup/sync


如此一來..算是大功告成了...原則上您已具備自動加密異地備援囉....趕緊找兩台機器來試試吧...
以上只是個人測試結果...如有錯誤...煩請指教!!!

2016年3月9日 星期三

MySQL : Convert Integer to DateTime and DateTime to Integer






SELECT UNIX_TIMESTAMP('2016-03-14 18:00:00')


SELECT FROM_UNIXTIME(1457949600,'%Y %m %d %H %i %s')