一:起因
(1)平时娱乐时,对于远程访问,用的最多的就是qq企鹅的远程协助;但是,对于工作中,我们应用的比较多的还是SSH或者其他远程登录软件
(2)再接触ssh之前,已经听说了公钥和秘钥的东东了,而且自己也简单的用c++实现了RSA加密的算法;但是一直不知道什么时候能够应用的到这种传说中非常牛X的算法。通过SSH ssh-keygen 命令生成id_rsa和id_rsa.pub秘钥和公钥文件;把公钥放到被访问的远程主机的用户的home目录的.ssh文件夹的authorized_keys文件中即可。
二:SSH无密码访问远程机器
(1)首先确保Linux系统已经安装ssh服务
安装方法:apt-get install ssh
安装完成后,验证是否SSH安装成功:ssh -V
结果显示ssh版本证明成功
查看Server端zyp用户家目录下是否存在隐藏目录".ssh"
在安装ssh完成后,进入zyp用户家目录,使用命令:ls -al 查看目录结构中是否存在隐藏目录“.ssh”
若存在,则操作正确,若不存在,解决方法如下:
1)按照步骤一,重新安装一遍ssh服务
2)若安装成功后还不存在".ssh"目录,则使用mkdir .ssh 在家目录下新建一个.ssh目录
一般来说,多数系统在安装完ssh服务后,默认都会自动建立“ssh”隐藏目录,只有少数需要手动创建。
(2)Client端生成公钥和密钥
我们使用RSA密钥认证的目的是:从Client端登陆Server端时,不需要密码认证。
所以,我们在进行认证时首先需要在Client端建立属于Client端自己的一对密钥(公钥和私钥),建立方法如下:
在命令行下执行:ssh-keygen
执行过程中,它先要求你确认保存公钥的位置(默认为:.ssh/id_rsa),
然后它会让你重复输入一个密码两次,如果不想在使用公钥的时候输入密码,可以留空
执行完毕后,就会生成数据Client端的一对密钥。
SSH 密钥默认储存在账户的家目录下的 ~/.ssh 目录中
关键是看有没有用 xxx_rsa 和 xxx_rsa.pub 来命名的一对文件,有 .pub 后缀的文件就是公钥,另一个文件则是密钥。
生成的一对公私钥,顾名思义:公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
(3)将Client端的公钥添加到用于认证的Server端的公钥文件中
首先检查Server端需要认证的zyp用户的家目录下,隐藏目录“ssh”目录下是否存在一个名为“authorized_keys”的文件,
若不存在,使用命令:touch authorized_keys 创建一个空文件
创建完成后,则可以执行如下步骤:
执行步骤如下:
1)将Clinet端公钥的内容复制
2)将复制到的Client端公钥内容,粘贴至Server端刚才创建的 authorized_keys 文件中,保存文件。
3)更改 authorized_keys 文件的权限
执行命令:chmod 600 authorized_keys
Client公钥内容格式大概如下:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzKGjCrHNCPCT96TTl8j1UtJ10V9a3fLIdx6R0upKP2N7FJP82Nni/vmAx7UVDhUNCgyfyG5Y6wK8AK2hOGjKLfLdfyYPojwmx3MF8KTspZBmmYKbHWh6Aem4TskRmsHOSpWeqns7o3tle0Ln1GMmPpdFph/owa7vj5/JYSOCBX8c+gGFyJeAMHGTs1fnHhGZRl5mzu8mWIv+qJnDxRmE/jBtuNXzSrPeZ2Cz86U+DfWtXVRyEl9XoIotX+GZ/zPxvPoMoItWD3UL6aA8McCX/PE7BLFA4B1Nl+mefTVpHH39AqcyqkcAJxntoqeNU3IwaM7sx/J7ONrFxp9Z3fjVR zyp@Client
(4)验证无密码登陆
在Client端命令行执行如下命令:
ssh -p12 zyp@10.2.31.33 (本例ssh服务开在了12端口,默认为22)
直接登陆至Server端,表示验证成功。(5)回顾一下简要的步骤
配置SSH无密码登录,大概需要3步:
1.生成公钥和私钥
2.导入公钥到认证文件,更改权限
3.测试
1.生成公钥和私钥,Shell代码 :
ssh-keygen -t rsa默认在 ~/.ssh目录生成两个文件:
id_rsa :私钥
id_rsa.pub :公钥
2.导入公钥到认证文件,更改权限
2.1 导入本机 Shell代码 :cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2.2 导入要免密码登录的服务器
首先将公钥复制到服务器,Shell代码:scp ~/.ssh/id_rsa.pub xxx@host:/home/xxx/id_rsa.pub
然后,将公钥导入到认证文件,这一步的操作在服务器上进行,Shell代码:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
2.3 在服务器上更改权限,Shell代码:
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
3.测试
ssh host,第一次登录可能需要yes确认,之后就可以直接登录了。
4,可以直接执行命令
ssh 10.207.139.62 'hostname'
以上参考自:http://www.cnblogs.com/shuaiwhu/archive/2010/08/24/2065091.html 和 http://chenlb.iteye.com/blog/211809
三:Linux 常见操作指令
(1)最常用的三个键
1)[Tab]按键 ---- 自动补全,双Tab提示信息
[Tab]按键就是在键盘的大写灯切换按键([Caps Lock])上面的那个按键!在各种Unix-Like的Shell当中, 这个[Tab]按键算是Linux的Bash shell最棒的功能之一了!他具有『命令补全』与『文件补齐』的功能喔! 重点是,可以避免我们打错命令或文件名呢!很棒吧!但是[Tab]按键在不同的地方输入,会有不一样的结果喔! 我们举下面的例子来说明。上一小节我们不是提到 cal 这个命令吗?如果我在命令列输入ca 再按两次 [tab] 按键, 会出现什么信息?
2)[Ctrl]-c 按键 ----- 中断目前的程序,比kill -9 id终止进程还牛X
如果你在Linux底下输入了错误的命令或参数,有的时候这个命令或程序会在系统底下『跑不停』这个时候怎么办?别担心, 如果你想让当前的程序『停掉』的话,可以输入:[Ctrl]与c按键(先按着[Ctrl]不放,且再按下c按键,是组合按键), 那就是中断目前程序的按键啦!
不过你应该要注意的是,这个组合键是可以将正在运行中的命令中断的, 如果你正在运行比较重要的命令,可别急着使用这个组合按键喔!
3)[Ctrl]-d 按键 ----- 输入结束,回到命令提示符下
那么[Ctrl]-d是什么呢?就是[Ctrl]与d按键的组合啊!这个组合按键通常代表着: 『键盘输入结束(End Of File, EOF 或 End Of Input)』的意思! 另外,他也可以用来取代exit的输入呢!例如你想要直接离开文字接口,可以直接按下[Ctrl]-d就能够直接离开了(相当于输入exit啊!)。
4)[Ctrl]-空格 按键 ----- 输入法切换
(2)关机与重启
1)关机:
# sudo shutdown -h now ----- 立刻关机,其中 now 相当于时间为 0 的状态
# sudo shutdown -h 20:25 ----- 系统在今天的 20:25 分会关机,若在21:25才下达此命令,则隔天才关机
# sudo shutdown -h +10 ------ 系统十分钟后关机
2)重启:
重新启动时,习惯下达如下的命令:
#sudo sync; sync; sync; reboot
(3)相对路径和决定路径
绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。
相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』这就是相对路径的写法啦!相对路径意指『相对於目前工作目录的路径!』
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
(4)ps -aux | grep 名称
1)查看某一个程序名的所有进程编号
ps -aux |grep abc 查看含有"abc"的活动进程
ps -aux |grep -v abc 查看不含abc的活动进程
2)停止某一个进程----- kill [信号代码] 进程ID
kill 的用法(删掉单个进程,而非整个程序):
kill [信号代码] 进程ID
注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止(对于僵尸进程,只好这样了);
3)停止某一程序的运行 —— killall 程序名
killall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。
用法:killall 正在运行的程序名
4)grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
命令格式:
grep [options] / grep 字符串 / grep pattern files
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。