存档

2016年5月 的存档

加速 SSH 连接的 tips

2016年5月18日 没有评论

SSH 登陆服务器的时候有很多流程,例如:

  • 不必要的将所有支持的登陆方式都尝试一遍知道某一种登陆成功.
  • 某些场景下不必要的 DNS 反向解析验证.

客户端指定验证方式加速连接

openssh 有基于 GSSAPI, host, 公钥/私钥, challenge-response, 密码等认证方式.
默认情况下, 客户端会使用一定的顺序尝试认证,直到某一种认证通过. 实际上, 在实际使用中,
我们一般只会使用秘钥和密码这两种认证方式,其他方式完全没有必要. 并且还会浪费时间.

可以在 ssh 客户端用户的配置文件中禁用其他配置.

# file: ~/.ssh/config
PreferredAuthentications publickey,password

上面的配置表示客户端仅支持(秘钥)和password(密码)认证. 并且优先尝试秘钥认证.

关闭 UseDNS

如果 UseDNS 选项被打开, 在客户端发起连接的时候, SSH 服务器会做一个 DNS 的反向查询验证,
根据客户端的 IP 地址进行 DNS PTR 反向查询, 用查询出到的客户端的主机名进行 DNS 正向 A 记录查询,
验证和原始地址是否一致. 一般来讲, 我们的客户端的 IP 都是动态的, 不存在 PTR 记录,
SSH 服务器做这个验证只会浪费时间, 如下的 debug 信息:

May 18 06:22:51 localhost sshd[4969]: debug3: mm_answer_pwnamallow
May 18 06:22:51 localhost sshd[4969]: debug3: Trying to reverse map address 25.0.0.1.  <-- 这里浪费了 15 秒, 很恼人
May 18 06:23:06 localhost sshd[4969]: debug2: parse_server_config: config reprocess config len 757
May 18 06:23:06 localhost sshd[4969]: debug3: mm_answer_pwnamallow: sending MONITOR_ANS_PWNAM: 1

所以一般推荐关闭这个选项, 修改 /etc/ssh/sshd_config 中 UseDNS 为 no:

UseDNS no

PS: 稍新的 openssh 版本改选项默认已经关闭

pam 认证相关

有时候登录很慢, 查询日志: 通常都会看到类似 pam 的问题:

May 18 00:00:26 m8x CROND[14936]: pam_systemd(crond:session): Failed to release session:

在支持 systemd 的系统上, 一般这种情况是处理用户登录的 systemd-logind 服务造成的, 重启该服务即可.

$ sudo systemctl restart systemd-logind.service
分类: Tips 标签:

使用 s3fs 挂载对象存储到本地磁盘

2016年5月10日 没有评论

虽然对象存储的协议和使用场景与传统的文件系统存储(传统的 NAS 等)存在较大的差异, 但是
某些场景下, 将对象存储当作普通的文件系统更为方便, 比如不用再为了一些基本的文件操作而
专门使用第三方客户端等.

以下介绍通过 s3fs 来将 S3 兼容对象存储作为文件系统使用的方法.

PS1: 对于 windows 用户来讲, 类似的工具很多, 比如使用 CloudBerry 提供的 CloudBerry Drive.

PS2: 对于非 S3 兼容的对象存储产品, 由于各大厂商都是模拟重新实现 S3 协议, 所以可以找到基于 s3fs
的工具, 比如阿里云对象存储的 ossfs, 用法和 s3fs 一样

安装

Linux

由于大部分发行版都没有在软件仓库中收录改包, 所以在 Linux 需要自行编译.

  • 安装开发依赖包
$ sudo apt-get install -y automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config # for ubuntu
$ sudo yum install -y automake fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel # for fedora
  • 下载编译 s3fs
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
$ cd s3fs-fuse
$ ./autogen.sh
$ ./configure # 如果报错, 查看具体错误类型安装相应的依赖
$ make -j3
$ sudo make install

OSX

Mac OS 由于有 Homebrew 的存在, 安装很方便:

$ brew install s3fs

使用

设置密码文件

echo {AccessKey}:{SecretKey} > $HOME/.passwd-s3fs && chmod 600 $HOME/.passwd-s3fs

挂载

$ s3fs {BucketName} {MountPoint} -o host=http://obs.eayun.com:9090 -o umask=0022
  • obs.eayun.com 是一个自己搭建的兼容 S3 的对象存储服务, 如果使用的是 S3, 则该选项不需要使用
  • umask 是挂载的权限, 和 liunx 下的 umask 的一致, 这个参数很重要, 否则挂载用户无法读写某些对象

示例:

$ mkdir mnt
$ s3fs tmp mnt -o host=http://obs.eayun.com:9090 -o umask=0022
$ df -h mnt
文件系统        容量  已用  可用 已用% 挂载点
s3fs            256T     0  256T    0% /home/dunrong/mnt

之后就可以像使用一般文件系统一样使用 bucket 了

$ cp Kvm-forum-2013-COLO.pdf vm.sh mnt/  # <-- 复制本地文件到对象存储
$ s3cmd ls s3://tmp  # <-- 在对象存储中查看是否成功
2016-05-09 08:04   2440042   s3://tmp/Kvm-forum-2013-COLO.pdf
2016-05-09 08:04       586   s3://tmp/vm.sh
$ du -sh mnt/  # <-- 查看使用量的大小
2.4M	mnt/
$ ls -l mnt/  # <-- 查看挂载点上是否存在上传的对象
总用量 2384
-rwxr-xr-x 1 dunrong dunrong 2440042  59 16:04 Kvm-forum-2013-COLO.pdf
-rwxr-xr-x 1 dunrong dunrong     586  59 16:04 vm.sh
$ rm mnt/vm.sh  # <-- 删除对象
rm:是否删除普通文件 "mnt/vm.sh"? y
$ ls -l mnt/
总用量 2383
-rwxr-xr-x 1 dunrong dunrong 2440042  59 16:04 Kvm-forum-2013-COLO.pdf
$ s3cmd ls s3://tmp  # <-- 在对象存储中查看是否删除成功
2016-05-09 08:04   2440042   s3://tmp/Kvm-forum-2013-COLO.pdf

优缺点

优点

  • 可以像传统文件系统一样读写对象存储, 比如复制删除查看文件等操作
  • 在不同设备(windows, linux, macos) 之间共享 bucket 较为方便

缺点

虽然 s3fs 基于 FUSE, 但是底层的实现协议还是对象存储的协议, 很多基于文件的操作无法实现,
或者实现起来性能很差. 所以和传统的 NAS 等文件系统存储比较, 存在很多缺点.

  • 由于原生 S3 协议不支持基于文件的读写, 追加文件和随机写文件非常慢
  • 由于 S3 协议没有所谓的元数据服务器, 列出文件, 查看文件夹大小等操作非常慢
分类: Storage 标签: