Showing posts with label ssh. Show all posts
Showing posts with label ssh. Show all posts

Wednesday, October 19, 2011

Vim编辑远程文件


Vi/Vim作为我最值得炫耀的编辑器(没有之一),与它的对手Emacs相比,经常被提到的一个优点就是:这个世界上几乎所有的*nix服务器,都会自带Vi/Vim。这个优点带来的方便之处在于,只要会用Vi/Vim,你就可以在任何一台*nix服务器上使用神乎奇技的手法来编辑文件,而不用额外安装软件(Emacs去哭吧)。这个优点几乎在我所有的服务器操作中都用到过,但在今天,似乎略有不便。
我有一台VPS,这基本上是众所周知的事情了。但中美网速的差别与两国国民生活水平一样大,导致我娴熟的指头在服务器上用Vim直接修改文件时,遇到了十分强烈停顿感。这深深地挫伤了我文思如泉涌的灵感。便想把远程文件下载到本地,修改后再上传,就像Emacs一直以来无奈的做法一样。当然这事必须不能手工去做,不然不仅不能给Vimer长脸,还会被认为是其它阵营派来给Vim抹黑的。
本文的主角是netrw.vim,它可以让Vim直接编辑网络上的文件(当然是netrw已经把该文件下载到临时文件里了),并且还支持保存到网络上(如果有写权限的话)。不知道从什么开始,它便成为Vim默认自带的插件了。在大多数现代GNU/Linux发行版里,安装Vim时都会顺便把它给装上了。
netrw使用起来也很简单。在终端里可以直接:
$ vim ftp://user@some_url/path/filename
这样便可以编辑一个远程文件,其它操作,便与编辑本地文件无异,该':w'或':q'时都悉听尊便。
但并不是所有的远程文件都能这么方便的访问,像我今天修改的那个文件,只有通过ssh才能访问到,并且ssh还是有key认证的。但是呢,对于我而言丝毫不影响,因为我还可以这样:
$ vim scp://t@tigerlee.me/path/target_file
也许你这样做,并不会成功,当然不成功的原因是多样的,最主要原因可能是你不能顺利地(不用输入密码,没有任何交互的提示)使用
$ scp://t@tigerlee.me/path/target_file .
来将target_file拷贝到本地。如果能做到顺利,那么你也会成功的。要实现顺利地使用scp,无外乎就是去掉一些不必要的认证过程,使用不带密码的key是最方便的了。详细使用参见netrw的文档:'netrw-ssh-hack',有Vim的哥们呢,就直接使用':h netrw-ssh-hack'来看好了。
当远程文件拥有一个冗长的路径时,直接输入全部路径可能比较麻烦,因为它又不能使用Tab补全。这时可以先输入:
$ vim scp://t@tigerlee.me/
然后再在稍后出现的路径列表里慢慢选了。
netrw共支持三种使用模式:远程编辑,远程浏览(包括浏览目录内容),远程写入。不同的模式,支持的协议也不同。这是理所当然了,不然对于HTTP地址的文件,怎么写入啊?以下是不同模式支持的协议:
远程编辑
:e dav://machine[:port]/path                    uses cadaver
:e fetch://[user@]machine/path                  uses fetch
:e ftp://[user@]machine[[:#]port]/path          uses ftp   autodetects <.netrc>
:e http://[user@]machine/path                   uses http  uses wget
:e rcp://[user@]machine/path                    uses rcp
:e rsync://[user@]machine[:port]/path           uses rsync
:e scp://[user@]machine[[:#]port]/path          uses scp
:e sftp://[user@]machine/path                   uses sftp

远程浏览
:Nread ?                                        give help
:Nread "machine:path"                           uses rcp
:Nread "machine path"                           uses ftp   with <.netrc>
:Nread "machine id password path"               uses ftp
:Nread "dav://machine[:port]/path"              uses cadaver
:Nread "fetch://[user@]machine/path"            uses fetch
:Nread "ftp://[user@]machine[[:#]port]/path"    uses ftp   autodetects <.netrc>
:Nread "http://[user@]machine/path"             uses http  uses wget
:Nread "rcp://[user@]machine/path"              uses rcp
:Nread "rsync://[user@]machine[:port]/path"     uses rsync
:Nread "scp://[user@]machine[[:#]port]/path"    uses scp
:Nread "sftp://[user@]machine/path"             uses sftp

远程写入
:Nwrite ?                                       give help
:Nwrite "machine:path"                          uses rcp
:Nwrite "machine path"                          uses ftp   with <.netrc>
:Nwrite "machine id password path"              uses ftp
:Nwrite "dav://machine[:port]/path"             uses cadaver
:Nwrite "ftp://[user@]machine[[:#]port]/path"   uses ftp   autodetects <.netrc>
:Nwrite "rcp://[user@]machine/path"             uses rcp
:Nwrite "rsync://[user@]machine[:port]/path"    uses rsync
:Nwrite "scp://[user@]machine[[:#]port]/path"   uses scp
:Nwrite "sftp://[user@]machine/path"            uses sftp
http: not supported!
小总结一下:
  • 网速慢,文件小的情况下,可以使用此法编辑远程文件。
  • 网速快,文件大的情况下,那就远程编辑文件吧。
  • 网速慢,文件大或网速快,文件小的情况下,你应该明白怎样做吧?

Tuesday, October 18, 2011

[转]使用公匙密匙来登录ssh

sh一种更加安全的登录方式是使用rsa/dsa方式来做验证。密码口令很可能被猜出来,但是用dsa方式验证的ssh,除非他弄到你的私匙,否则肯定是安全的。
ssh-keygen命令可以用来生成rsa/dsa方式的公匙密匙。
ssh-keygen或者ssh-keygen -t rsa生成rsa方式的密匙。ssh-keygen -d 或者 ssh-keygen -t dsa生成dsa方式的密匙。具体rsa和dsa的区别看 这里 。
上面的命令会在~/.ssh文件夹中生成公匙(id_*sa.pub)和密匙(id_*sa),将pub文件中的内容copy到远程服务器你的 home目录下面的.ssh目录中的authorized_keys[2]这个文件中,有没有最后的那个2要看你用的是ssh1还是ssh2方式,通常都 有2。
然后就是远程服务器的这些文件需要有正确的权限,.ssh目录是700,authorized_keys2文件是644。
此后再登录服务器的时候应该就不需要输入密码了。
有一个小tip,就是给服务器的ip设置一个好记的形式,那么多的ip记住不容易阿,而且每次还得一个一个输入。具体方法就是修改hosts文件,添加类似下面的内容就可以了,相当于自己做了一个dns,呵呵。
#销售server
218.x.2.128 s128 xs xiaoshou
#db server
218.x.23.189 s189 db oracle
这样,以后访问s128或者s189就可以了,当然后面的xs、xiaoshou、db、oracle也都是别名,都可以用来访问。
还有一个tip,是关于term的。如果用的是urxvt,访问的远程服务器的时候可能会遇到“unknow terminal : rxvt-unicode” 类似的错误,如果出现了类似错误,会导致在服务器端vim和ls都没有颜色。解决方法是在.Xdefaults文件中添加URxvt.termName: xterm,或者.bash_profile里面自己设置一下TERM类型。

原文:  http://wdicc.com/public-key-in-ssh/

Sunday, October 16, 2011

arch 配置 软件 使用 sock5 代理

一.tsocks:
1.安装tsocks,在终端中:
#pacman -S tsocks
2.修改配置文件:
vi /etc/tsocks.conf
3.将其内容改成以下几行并保存退出:
local = 192.168.1.0/255.255.255.0 #local表示本地的网络,也就是不使用socks代理的网络
server = 127.0.0.1 # SOCKS 服务器的 IP
server_type = 5 # SOCKS 服务版本
server_port = 7070 #SOCKS 服务使用的端口
你可能需要修改一下以上内容,用你自己的 SSH 隧道设置
4.用tsocks运行你的软件,在终端中:
tsocks 你的软件 &
现在我的python-twitter在终端中就是通过此软件运行的.
二.proxychains:
1.安装proxychains,在终端中:
#yaourt -S proxychains
2.修改配置文件(/etc/proxychains.conf),应该如下:
# proxychains.conf VER 3.1
#
# HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
#
# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
dynamic_chain
#
# Dynamic – Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
#strict_chain
#
# Strict – Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#random_chain
#
# Random – Each connection will be done via random proxy
# (or proxy chain, see chain_len) from the list.
# this option is good to test your IDS :)
# Make sense only if random_chain
#chain_len = 2
# Quiet mode (no output from library)
#quiet_mode
# Proxy DNS requests – no leak for DNS data
proxy_dns
# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000
# ProxyList format
# type host port [user pass]
# (values separated by ‘tab’ or ‘blank’)
#
#
# Examples:
#
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080
#
#
# proxy types: http, socks4, socks5
# ( auth types supported: “basic”-http “user/pass”-socks )
#
[ProxyList]
# add proxy here …
# meanwile
# defaults set to “tor”
http 127.0.0.1 8580
socks5 127.0.0.1 7070
socks4 127.0.0.1 9050
注意事项:
a. 要选 dynamic_chain 而不是 random_chain
b. 可以列举几个代理服务器,proxychains 会按顺序用,代理无法访问即自动选用下一个
c. 代理服务器要根据自己电脑的情况自行调整
3.运行proxychains与运行tsocks完全一样.在终端中:
proxychains 你的软件 &
至此以上软件配置完毕.

Tuesday, October 11, 2011

cjb的ssh shell地址

另外可到 CJB 申请免费 SSH 帐号。由于其域名在国内已被“污染”,登录时应使用 IP 地址(目前为 216.194.70.6)

比如登陆

ssh username@216.194.70.6

Monday, October 10, 2011

[转]16条技巧让你更高效使用SSH

SSH有很多非常酷的特性,如何它是你每天的工作伴侣,那么我想你有必要了解以下16条高效使用SSH的秘籍,它们帮你节省的时间肯定会远远大于你用来配置它们的时间。
1. 多条连接共享
如果你需要在多个窗口中打开到同一个服务器的连接,而不想每次都输入用户名,密码,或是等待连接建立,那么你可以配置SSH的连接共享选项,在本地打开你的SSH配置文件,通常它们位于~/.ssh/config,然后添加下面2行:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
现在试试断开你与服务器的连接,并建立一条新连接,然后打开一个新窗口,再创建一条连接,你会发现,第二条连接几乎是在瞬间就建立好了。
Windows用户
如果你是Windows用户,很不幸,最流行的开源SSH客户端Putty并不支持这个特性,但是Windows上也有OpenSSH的实现,比如这个Copssh,如果你觉得下面的一些技巧对你很有帮助,或许你应该试试Copssh。
文件传输
连接共享不止可以帮助你共享多个SSH连接,如果你需要通过SFTP与服务器传输文件,你会发现,它们使用的依然是同一条连接,如果你使用的 Bash,你会发现,你甚至SSH甚至支持Tab对服务器端文件进行自动补全,共享连接选项对于那些需要借助SSH的工具,比如rsync,git等等也 同样有效。
2. 长连接
如果你发现自己每条需要连接同一个服务器无数次,那么长连接选项就是为你准备的:
ControlPersist 4h
现在你每次通过SSH与服务器建立连接之后,这条连接将被保持4个小时,即使在你退出服务器之后,这条连接依然可以重用,因此,在你下一次(4小时 之内)登录服务器时,你会发现连接以闪电般的速度建立完成,这个选项对于通过scp拷贝多个文件提速尤其明显,因为你不在需要为每个文件做单独的认证了。
3. 别再输入密码
如果你还在通过密码方式登录SSH,那么你或许应该试试SSH Keys,首先使用OpenSSH为自己声称一对密钥:
$ ssh-keygen
跟随指示,完成之后,你应该可以在你的.ssh目录下看到两个文件,id_rsa就是你的私钥,而id_ras.pub则是你的公钥,现在你需要将你的公钥拷贝到服务器上,如果你的系统有ssh-copy-id命令,拷贝会很简单:
$ ssh-copy-id smylers@compo.example.org
否则,你需要手动将你的公钥拷贝到服务器上的~/.ssh/authorized_keys文件中:
$ < ~/.ssh/id_rsa.pub ssh clegg.example.org 'mkdir -p .ssh; cat >> .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys'
现在试试重新连接到SSH服务器,或是拷贝文件,是不是已经不需要再输入密码了?
为Putty配置SSH Key
Putty也可以使用SSH Key,从Putty网站下载PuttyGen和Pageant,然后使用PuttyGen生成你的密钥,将公钥拷贝到服务器的'.ssh/authorized_keys'目录,然后运行Pageant,导入你的私钥,让它在后台运行,险隘你就可以使用Putty通过公钥直接登录服务器了,你可以在Putty手册的第8,9章了解关于这一特性的详细介绍。
4. 连接中转
有时候你可能需要从一个服务器连接另外一个服务器,比如在两个服务器之间直接传输数据,而不用通过本地电脑中转:
www1 $ scp -pr templates www2:$PWD
(顺便说一下,当你需要在两台服务器间拷贝文件时,$PWD变量时非常有用的),因为即使你已经在两台服务器上添加了你本地电脑的公钥,scp默认 仍然会提示你输入密码:这是因为你用来作为跳板的那台服务器上并没有你的私钥,所以,第二胎服务器会拒绝你的公钥,但是一定不要通过将你的私钥拷贝到中转 服务器上来解决这个问题,你可以使用agent forwarding来解决这个问题,只要在你的.ssh/config文件中加入下面这行代码就可以了:
ForwardAgent yes
或者是在Putty中勾上“Allow agent forwarding”选项,现在你的本地SSH就变成了第一台服务器的SSH代理,从第一台服务器在连接其它服务器就变和和在你本地一样简单,注意,如果要开启这个选项,前提是这个中间服务器值得你信任。
5. 省略主机名
输入服务器的完整主机名来建立一个新的SSH连接实在是太乏味无聊了,尤其是当你有一组拥有相同域名但是子域名不同的服务器需要管理时,比如下面这样:
* www1.example.com
* www2.example.com
* mail.example.com
* intranet.internal.example.com
* backup.internal.example.com
* dev.internal.example.com
或许你的网络已经配置了可以直接使用短域名,比如intranet,但是如果你的网络不支持,实际上你可以自己搞定这个问题,而不用求助网络管理员。
解决办法根据你用的操作系统而略有差异,下面是我的Ubuntu系统的配置:
prepend domain-search "internal.example.com", "example.com";
然后你需要重启网络:$ sudo restart network-manager
不同的系统,这两条命令可能会略有差异。
5. 主机别名
你也可以在你的SSH配置中直接定义主机别名,就像下面这样:
Host dev
    HostName dev.internal.example.com
你还可以使用通配符来进行分组:
Host dev intranet backup
    HostName %h.internal.example.com
Host www* mail
    HostName %h.example.com
在Putty中你可以为每个主机名保存单独的session,然后双击建立连接(但是它可能没办法支持通配符)。
7. 省去用户名
如果你在远程服务器上的用户名和你本地的用户名不同,你同样可以在SSH配置中进行设置:
Host www* mail
    HostName %h.example.com
    User simon
现在就算我的本地用户名是 smylers,我仍然可以这样连接我的服务器:
$ ssh www2
SSH会使用simon账户连接你的服务器,同样,Putty可以保存这个信息在你的session中。
8. 在服务器间跳转
有些时候,你可能没法直接连接到某台服务器,而需要使用一台中间服务器进行中转,这个过程也可以自动化。首先确保你已经为服务器配置了公钥访问,并开启了agent forwarding,现在你就可以通过2条命令来连接目标服务器,不会有任何提示输入:
$ ssh gateway
gateway $ ssh db
然后在你的本地SSH配置中,添加下面这条配置:
Host db
    HostName db.internal.example.com
    ProxyCommand ssh gateway netcat -q 600 %h %p
现在你就可以通过一条命令来直接连接目标服务器了:
$ ssh db
这里你可能会需要等待长一点的时间,因为SSH需要进行两次认证,,注意netcat也有可能被写成nc或者ncat或者前面还需要加上g,你需要检查你的中间服务器来确定实际的参数。
9. 突破网络封锁
有些时候,你使用的网络可能只开放了80端口,或者它们封锁了SSH端口(默认的22端口),这种情况下,你可以通过配置SSH服务器在80或者443端口进行监听来突破封锁,只需要编辑你的服务器的/etc/ssh/sshd_config文件:
Port 443
然后重启SSH服务器:
$ sudo reload ssh
当然这样做的前提是你的服务器没有使用HTTS服务,但是实际上你只需要设置一台服务器使用https端口就够了,你但你可以访问这台服务器,你就 可以使用我们前面提到的技术利用它作为跳板来访问其它服务器,但是记住,你需要提前配置好这台服务器(现在怎么样?),这样万一当你身处一个只能访问 Web的网络环境时,就可以省掉打电话让其他人帮你配置中间服务器的麻烦了。
10. 穿越Web代理
有些时候,你所在的网络不止封锁SSH端口,它们有可能更进一步,只让你通过Web代理来访问网络,幸运的是我们有一个叫做Corkscrew的程序可以通过Web代理在发送SSH数据。Corkscrew的使用非常简单,一般我都是在需要时搜索,然后直接下载,跟随网站上的指示,然后就搞定了,一般你需要这样一条配置:
ProxyCommand corkscrew proxy.example.org 8080 %h %p
11. 远程GUI
有时候通过本地的GUI程序来访问远程服务器的文件会非常有用,比如,编辑一副图片,或者查看一个PDF文件,或者只是简单的通过一个非命令行的编 辑器来修改代码,我发现GVim要比终端里的Vim更有用,因为我可以通过gvimopens打开一个新窗口来编辑文件,而用当前的SSH窗口继续执行其 它操作,不要要这样做,你需要先在你的SSH配置中开启一个叫做X forwarding的选项:
ForwardX11 yes
这个选项需要服务器配置才能起作用,服务器也需要开启X forwarding,你可以在服务器的/etc/ssh/sshd_config中添加下面这个命令:
X11Forwarding yes
同时你还需要确保安装了xauth,编辑器,图片查看器以及其它的你需要运行的图形化程序,这种方式只有在支持本地X服务器的操作提供才可以工 作,mac和Windows上都有免费的X Server,你可能需要花些时间配置它们,相比之下,切换到Linux相对会更容易一下。
12.本地操作远程文件
另一种让远程GUI程序显示在本地的替代方案就是让本地的GUI程序可以直接操作远程文件,你可以通过SSHFS来实现,只需要创建一个空目录,然后使用SSHFS将一个远程目录mount到这个目录就可以了:
$ mkdir gallery_src
$ sshfs dev:projects/gallery/src gallery_src
$ cd gallery_src
$ ls
现在你就可以使用任何你喜欢的本地程序来便捷这个目录中的文件了,它们看起来是在你的本地,但其实时远程服务器上的文件,你可以使用fusermount命令来unmount这些文件,不要担心记不住,它们就在sshfs手册的顶上:
$ cd ..
$ fusermount -u gallery_src
SSHFS可以在Linux和OSX上工作,Windows用户我目前还没找到什么好办法。
13. 通过Vim访问远程文件
Vim有一个内置的功能可以直接编辑远程文件,需要借助SCP URL:
$ gvim scp://dev/projects/gallery/src/templates/search.html.tt
这中方式明显不如SSHFS灵活,但是如果你只需要对远程服务器的1,2个文件进行编辑时,这条命令就要更灵活一些了,并且可以在Windows上你也可以这样做:
:help netrw-problems
14. 使用本地App连接远程服务器
有时可能有些服务,比如数据库或是Web服务器,它们运行在远程服务器上,但是如果有用方式可以直接从本地程序连接它们,那会非常有用,要做到这一 点,你需要用到端口转发(port forwarding),举个例子,如果你的服务器运行Postgres(并且只允许本地访问),那么你就可以在你的SSH配置中加入:
Host db
    LocalForward 5433 localhost:5432
现在当你连接你的SSH服务器时,它会在你本地电脑打开一个5433端口(我随便挑的),并将所有发送到这个端口的数据转发到服务器的5432端口 (Postgres的默认端口),然后,只要你和服务器建立了连接,你就可以通过5433端口来访问服务器的Postgres了。
$ ssh db
现在打开另外一个窗口,你就可以通过下面这条命令在本地连接你的Postgres数据库了:
$ psql -h localhost -p 5443 orders
如果你想要使用服务器不支持的图形化Postgres客户端时,这条命令会显得尤其有用:
$ pgadmin3 &
或者你有一个后台的Web服务器,你不希望直接通过Internet访问它,你也可以通过端口转发来访问它:
Host api
    LocalForward 8080 localhost:80
现在连接到服务器:
$ ssh api
然后将浏览器指向你选择的端口号:
$ firefox http://localhost:8080/
15. 减少延迟
如果每次连接服务器都意味着你需要等待几十秒而无所事事,那么你或许应该试试在你的SSH配置中加入下面这条:
GSSAPIAuthentication no
如果这条命令有效的话,你应该通知你的系统管理员让他在服务器上禁用这个选项,这样其他人就不用再分别添加这条配置到它们的本地配置了。
16. 加速连接
如果你确保你和某个服务器之间的连接是安全的(比如通过公司内网连接),那么你就可以通过选择arcfourencryption算法来让数据传输更快一些:
Host dev
    Ciphers arcfour
注意这个加速是以牺牲数据的“加密"性为代价的,所以如果你连接的是位于网上的服务器,千万不要打开这个选项,并且确保你是通过VPN建立的连接。
开始行动吧!
以上就是我收集的高效使用SSH的技巧合集了,如果你还有更多技巧想要分享,记得通过Smylers@cpan.org或是通过@Smylers2来和我联系。
现在就赶紧行动试试通过这些技巧来让你的SSH更有效率吧!
-----------
本文来自:SSH Can Do That? Productivity Tips for Working with Remote Servers,作者:Smylers,翻译l整理:@yuanyiz

Wednesday, October 5, 2011

[转载]ssh 自动登陆的4种方法

自动ssh登录的几种方法

1. 自动ssh/scp方法==

A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;
A和B的系统都是Linux

在A上运行命令:
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh root@192.168.60.110 "mkdir .ssh" (需要输入密码)
# scp ~/.ssh/id_rsa.pub root@192.168.60.110:.ssh/id_rsa.pub (需要输入密码)

在B上的命令:
# touch /root/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到authorized_keys 中)

回到A机器:
# ssh root@192.168.60.110 (不需要密码, 登录成功)


2. 控制n个机器如上所述自动登录
那就需要n对钥匙(密钥和公钥), ssh-keygen 命令可以随意更改钥匙对的名字, 比如:
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.60.110

这样私钥和公钥的名字分别就是: id_rsa_192.168.60.110和 id_rsa_192.168.60.110.pub;然后将 id_rsa_192.168.60.110.pub 文件的内容, 追加到sever的 ~/.ssh/authorized_keys文件中,最后, 在本地用ssh命令的 -i 参数指定本地密钥, 并登录:
# ssh -i /root/.ssh/id_rsa_192.168.60.110 someone@192.168.60.110

scp也是一样的
# scp -i /root/.ssh/id_rsa_192.168.60.110 filename someone@192.168.60.110:/home/someone

在文件.bashrc中加下两行,每次做同样的操作就不用敲入这样长的命令了:
alias sshcell='ssh -i /root/.ssh/id_rsa_192.168.60.110 someone@192.168.60.110'
alias scpcell='scp -i /root/.ssh/id_rsa_192.168.60.110 filename someone@192.168.60.110:/home/someone'

这样,直接键入一下指令实现ssh和scp自动登录:
# sshcell
# scpcell


3. 自动ssh/scp脚本
如果需要从A,到B,然后才能够到C,那么需要ssh和scp两次,是比较麻烦的。
ssh自动登录:
#!/usr/bin/expect -f
set timeout 30
spawn ssh weiqiong@B
expect "password:"
send "pppppp\r"
expect "]*"
send "ssh weiqiong@C\r"
expect "password:"
send "pppppp\r"
interact


scp从A拷贝文件到C:
#!/usr/bin/expect -f
set timeout 300
set file [lindex $argv 0]
spawn scp $file weiqiong@B:/home/weiqiong
expect "password:"
send "pppppp\r"
expect "]*"
spawn ssh weiqiong@B
expect "password:"
send "pppppp\r"
expect "]*"
send "scp $file weiqiong@C:/home/weiqiong\r"
expect "password:"
send "pppppp\r"
expect "]*"
exit
interact

scp从C拷贝文件到A:
#!/usr/bin/expect -f
set timeout 300
set file [lindex $argv 0]
spawn ssh weiqiong@B
expect "password:"
send "pppppp\r"
expect "]*"
send "scp weiqiong@C:/home/weiqiong/$file .\r"
expect "password:"
send "pppppp\r"
expect "]*"
send "exit\r"
expect "]*"
spawn scp weiqiong@B:/home/weiqiong/$file .
expect "password:"
send "pppppp\r"
interact

4. 建立ssh/scp通道
比如说我的机器是A,中间服务器为B,目标服务器是C

从A可以ssh到B,从B可以ssh到C,但是A不能直接ssh到C

现在展示利用ssh通道技术从A直接传输文件到C

1. ssh -L1234:C:22 userid@B

input B's password

(1234是本机A的空闲端口,该指令需要A机器上的root用户权限,实际上是在本机1234端口建立了一个通道)


2. 打开一个新的console,键入:

scp -P1234 filename userid@localhost:

input C's password

Saturday, October 1, 2011

How To Fix Offending key in ~/.ssh/known_hosts file

As we discussed earlier in our basic ssh client commands article, when you do ssh to a machine for the 1st time (or whenever there is a key change in the remote machine), you will be prompted to say ‘yes’ for authenticity of host.

This feature is controlled using StrictHostKeyChecking ssh parameter. By default StrictHostKeyChecking is set to yes.
The default setting of “StrictHostKeyChecking yes” is the best option from security point of view to protect your system against any trojan horse attacks. If you don’t know what you are doing, you should not set StrictHostKeyChecking to no.
Sometimes it might be good to disable it temporarily. For example, 1st time when you are connecting to lot of known hosts, you might want to set disable this feature (i.e asking yes for host keys) and let ssh add automatically all the host keys. Later you can enable this feature.
When you have configured automated passwordless login for a server and if the remote host key keeps changing for a reason (that you know why it is changing), you might want to consider setting StrictHostKeyChecking to no until the problem of remote host key keep changing is fixed.
From the ssh command line, you can pass StrictHostKeyChecking option as shown below. You can also set this option in your ssh_config file
# ssh -o 'StrictHostKeyChecking no' user@host
If you are logging in to the server for the 1st time, it would permanently add the RSA to the list of known hosts without prompting you.
But, if there is a key change (normally if the OS (or sshd) is reinstalled, the remote host key will change), then you have to delete old invalid key as shown below.

Remove the offending ssh key

Following error will be displayed when the remote host key changes (after you’ve connected earlier with a valid remote host key).
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
a7:a8:f2:97:94:33:58:b7:9d:bc:e0:a6:6b:f7:0a:29.
Please contact your system administrator.
Add correct host key in /home/ramesh/.ssh/known_hosts to get rid of this message.
Offending key in /home/ramesh/.ssh/known_hosts: 6
Permission denied (publickey,password).
You have to remove the key to proceed further. Use the following command to remove the offending key.,
# sed -i '6d' ~/.ssh/known_hosts
Note: Change the 6d according to the line number shown.
If your sed does not have -i option, use perl or use some editor to remove the offending key.
Perl solution:
# perl -pi -e 's/\Q$_// if ($. == 6);' ~/.ssh/known_hosts
Note: Change the line number from 6 to appropriate line number.

install arch from ssh

今天无聊在虚拟机中安装arch,由于使用awesome,所以窗口很扁,所有就想试试通过ssh安装arch.

首先在virtualbox中为arch设置2个网卡,一个使用NAT,一个使用Bridged Adapter

前几天翻译了arch的 install from ssh的中文,一直没有机会体验,现在终于可以体验一下了.

为使用SSH设置live安装环境


  • 首先你要安装的机器必须有网络连接,并且安装机的ip你必须知道,然后在安装机器上使用iso或者其他景象启动到[root@archiso~]#界面(arch的安装界面).

  • 然后建立目标主机的网络配置.

[root@archiso~]# aif -p partial-configure-network


  • 使用pacman同步镜像并且安装openssh(2010.8.19的镜像不需要同步这一步,因为iso里已经有可用的openssh了)

[root@archiso~]# pacman -Syy openssh


[root@archiso~]# rc.d start sshd

Note: 考虑到安装介质的年龄,pacman总要抱怨它自己要第一个被更新.考虑到只要简单的安装sshd包,推荐取消pacman的更新要求从而只安装一个包(openssh).

  • 最后,为建立ssh链接设立一个root密码;默认root的arch密码是空的.

[root@archiso~]# passwd




通过SSH连接到目标PC

使用下面的命令以链接到目标机器:
$ ssh root@ip.address.of.target
从现在开始尽管我们在本地,也可以通过我们自己的键盘控制远程的机器显示安装画面了.
ssh root@10.1.10.105
root@10.1.10.105's password: 
Last login: Thu Dec 23 08:33:02 2010 from 10.1.10.200
**************************************************************
* To begin installation, run /arch/setup                     *
* You can find documentation at                              *
*  /usr/share/aif/docs/official_installation_guide_en        *
*                                                            *
* i18n: Use the 'km' utility to change your keyboard layout  *
*       and console font.                                    *
*                                                            *
* If you are looking to install Arch on something more       *
* exotic, such as your kerosene-powered cheese grater,       *
* please consult http://wiki.archlinux.org.                  *
*                                                            *
**************************************************************
[root@archiso ~]#


接下来你就可以继续安装了,很简单吧. 

其中发生了一个小插曲,当我用ssh登陆到目标机器的时候,发现无法使用/arch/setup命令,错误代码是

error opening terminal: rxvt-unicode-256color


解决办法就是在.bashrc中添加一段
alias ssh="TERM=linux ssh"


参考

    https://wiki.archlinux.org/index.php/Install_from_SSH

    http://forums.gentoo.org/viewtopic-t-733895.html

      Saturday, September 17, 2011

      linux下使用ssh tunnel来翻墙

      ~/sshautologin.html
      首先在www.ssh4gfw.com注册帐号察看这个链接
      
      然后使用的来的帐号密码可以建立ssh tunnel(ssh隧道)了,速度还可以而且是免费的.
      
      ssh -v -CNgD 7070 username@server
      
      其中:
      
          -v verbose,显示详细信息;
          -C Requests compression  of  all  data,压缩传输数据;
          -N Do  not  execute a remote command,不运行远程程序。即通知 sshd 不运行设定的 shell;
          -g Allows remote hosts to connect to local forwarded ports,允许远程主机链接本地端口;
          -D Specifies a local “dynamic” application-level port forwarding,建立tunnel,监听本地端口;
      
          ——–可选参数——–
          -q quiet,安静模式;
          -f Requests ssh to go to background just before command  execution, ssh在后台运行,即认证之后,ssh退居后台;
          -n Redirects stdin from /dev/null,将 stdio 重定向到 /dev/null,与-f配合使用
      
      最简方案:(不推荐)
      1
          ssh -D 7070 username@server
      
      不论是 windows 还是 linux,只要 ssh 登录成功就可以进行下一步啦~
      
      ssh自动输入密码登陆的方法:
      
      1. 通过rsa密匙验证(配置家单,并且ssh,scp,sftp等登陆都面去了输入密码的麻烦)
      
          1,生成rsa的密匙.
          $ssh-keygen -t rsa
      
          2,将公匙存放到服务器上(注意存放目录位置)
          $scp ~/.ssh/id_rsa.pub username@server:~/.ssh/authorized_keys
      
          大功告成!通过ssh登陆,通过scp或者sftp传输文件啥的都不用再输入密码了!
      
      2.安装sshpass
      
          1,安装sshpass
          Debian系的linux
          $sudo apt-get install sshpass
          Arch
          $sudo yaourt sshpass
      
          2,使用方法
          $sshpass -p password ssh username@server
      
          使用-p指定密码,还需要在后面跟上标准的ssh链接命令
      
      
      我使用了上面的第2中方法,第1种方法还需要上传公匙,我发现我没法上传到ssh4gfw上
      
      使用下面的命令就可以很简单的使用ssh代理了
      
      $sshpass -p password ssh -v -CNgD 7070 username@ww.ssh4gfw.com
      
      然后在firefox中把about:config中的network.proxy.socks_remote_dns设为true来防止dns污染
      
      然后设置autoproxy(福)添加新代理,使用127.0.0.1,socks 5,端口7070就可以使用代理咯
      
      ssh tunnel(ssh隧道)的原理的简单图式
      
      Youtube/facebook/====ssh代理服务器====GFW=====user
                       80/443端口           22端口
      
      ssh本来就是全程加密传输,所以在22端口传输的数据包裹上80端口的内容,就好像在打条隧道一样,很简单吧.这样就可以很容易的突破网络封锁了.
      
      下面说说给ssh tunnel的帐号建立最小的权限
       1,在服务器新建立一个user
        # useradd -s /bin/false username
       2,设置密码
        # passwd username
       3,修改/etc/passwd文件:把用户的shell设置为/usr/bin/passwd
       4,把/usr/bin/passwd这一行写入/etc/shells
        # echo "/usr/bin/passwd" >> /etc/shells
      使用/usr/bin/passwd作为用户的shell,这样用户就可以通过登陆自主修改密码,但是用户没有权限运行其他命令(sshd 认证通后之后,会检查设定的shell是否登记在/etc/shells文件中,若已经登记,则fork自己,然后fork出来的子进程再exec设定的shell).此时账号username可以通过sshd的认证使用TcpForwarding,但是不能运行shell,不能与系统交互.可以安全而快速的为用户提供ssh 代理.
      

      arch安装配置sshd

      ~/sshd.html
      分辨:OpenSSH和OpenSSL
      
       这2者不但只差1个字母,用途却惊人的相似-提供开源的加密通讯解决方案.
      
       正如名称介绍的,2者均为开源跨平台软件,OpenSSH是隶属于OpenBSD的SSH协议加密数据传输项目,而OpenSSL则是网景的加密畅想开源实现.
      
       我们更多的时候实在web浏览器中使用SSL加密访问网站,在终端之中用OpenSSH(ssh)加密登陆到服务器.
      
       更多的阅读 ssh && ssl [wikipedia.org]
      
      安装OpenSSH
      
       Arch下通过这个命令,就可以将OpenSSH安装到你的计算机中:
          pacman -S openssh
      
       你可以顺便熟悉一下ssh的基本操作
          man ssh
      
       当然现在就可以使用ssh登陆你有帐号的主机了
          ssh -p port user@server-address
      
      配置ssh
      
       Arch下ssh的全局配置文件在:/etc/ssh/ssh_config
       个人的配置文件在:~/.ssh/config
      
       至于配置文件你可以询问man了,其中比较有用的一条是:
      把# Protocol 2,1 改为 Protocol 2(表示只有协议2将被使用,协议1被认为不太安全.
      
      
      配置Daemon
      
       sshd的配置文件位于:/etc/ssh/sshd_config
      
       你可以修改配置文件来实现:变更ssh监听端口,密码错误尝试次数,是否允许root登陆等操作,重启sshd是配置生效.
      
       比如你只想允许某些用户登陆,请在文件中加入这行:
          AllowUsers  user1 user2
       禁止root登陆进SSH,加入下面的一行:
          PermitRootLogin no
       当然你可以取消在/etc/issue文件中BANNER前面的注释来显示欢迎信息.
      
       如果你开启了你本机的sshd服务可以使用nmap -PO 127.0.0.1来察看你所使用的sshd所使用的端口.
      *当然你可以改变默认的服务端口22到一个别的端口比如888
      *完全取消密码登陆方式可以增强安全性,因为每个服务器的用户都需要创建ssh密匙
          /etc/ssh/sshd_config
      
          PasswordAuthentication no
          ChallengeResponseAuthentication no
      
      允许其他主机进入
      
       *你必须改变你的文件,因为默认的这2个文件是空的.
      
       为了让其他人通过ssh登陆到你的机器,你必须设置/etc/hosts.allow文件,加入下面类似的内容
       # 让每个人都能连接到你
       sshd: ALL
      
       # 或者限制只能特定的ip能够
       sshd: 192.168.0.1
      
       # 或者限制ip段
       sshd: 10.0.0.0/255.255.255.0
      
       # 或者限制为IP匹配
       sshd: 192.168.1.
      
       现在检查你的“/etc/hosts.deny”文件,找到并确保有类似下面一行的内容:
      
          ALL: ALL
      
       你能SSH出去别人也应该能够SSH进来:)。
      
       开始使用新的配置之前,要先重启守护进程(以root身份):
      
          # rc.d restart sshd
      
      管理SSHD Daemon
      
       这样把sshd加入到/etc/rc.conf的"DAEMONS"中就可以开机启动了
          DAEMONS=(... ... sshd ... ...)
      
       启动/重启/关闭这个服务,可以使用:
          # rc.d {start|restart|stop} sshd 
      Arch ssh配置 [wiki.archlinux.org]
      

      Wednesday, July 27, 2011

      一劳永逸的翻墙方式 ssh -D(linux+firefox)


      综述

      操作系统:Linux (debian\ubuntu\opensuse\fedora)
      浏览器:Firefox »
      优点:A方案支持断线自动重连,B方案操作简单;智能判断网址并切换代理。

      第一步A方案:安装并配置expect

      在 debian/ubuntu 终端中输入 : apt-get install expect
      在 opensuse 终端中输入:zypper in expect
      在 fedora 终端中输入: yum install expect

      安装完毕后新建一个文件,比如命名为 sshgfw , 将如下代码复制进去,并根据代码中的注释将部分代码修改为你自己的SSH帐号信息。

      #!/usr/bin/expect
      set timeout 60
       
      spawn /usr/bin/ssh -D 7070 -g username@yourserver.com
      #这里的 username 为你自己的用户名,yourserver.com 为你自己的服务器域名或ip
      expect {
      "password:" {
      send "password\r"
      #将第二个 password 改为你自己的密码
      }
      }
      interact {
      timeout 60 { send " "}
      }
      view raw This Gist brought to you by GitHub.

      加上可执行权限 chmod a+x sshgfw, 然后就可以在它所在的目录 ./sshgfw 执行就行了。当然也可以把它复制到 /usr/local/bin 或 /usr/bin 等目录下,以方便本机所有用户都可以快捷的使用。

      注:ssh 加上 -g (即在代码中的 ssh -D 7070 -g ) 可使局域网内其它机器使用我的机器做代理. 以我的情况为例:我在一个局域网内的 ip 为 192.168.1.16 , 当我联上服务器之后,我就可以使用 localhost:7070 做代理,同时我的局域网内的其它 ip 为 192.168.1.* 的机器,就可以用代理 192.168.1.16:7070 来穿墙啦。

      第一步B方案:在终端直接登陆

      打开终端,输入:ssh -D 7070 username@yourserver.com,回车;
      输入密码后,回车,即可登陆。

      第二步:配置Firefox浏览器

      假设你正使用Firefox »浏览器阅读本文。

      扩展一键安装:AutoProxy »

      xpi-offical

      点击立即安装,安装后,重新启动Firefox。然后你会看到如下对话框,选择gfwlist (P.R.China)后,点击确定。

      gfwlist

      接着你会看到Firefox主界面右上角出现有一个“福”字图案,点击“福”。

      fu

      点击“代理服务器——编辑代理服务器”。

      edit

      随即出现如下画面,你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。

      before

      将GAppProxy一栏的参数修改为如下图所示。

      after

      修改完毕后,点击确定。至此配置已全部就绪。

      版权信息:您可以自由复制、传播、演绎本作品且无需署名、无需注明原始出处。