SSHv1での接続試行

表題の件について。

■ 環境

  • Ubuntu

■ /var/log/auth.log

AWSで公開しているUbuntuサーバに下記のようなログが大量に出ている。

Jan 24 19:12:37 host001 sshd[10351]: Did not receive identification string from XXX.XXX.XXX.XXX

これがどういう時に出力されるのか気になったので調べてみると、SSHのプロトコルバージョンでサーバとクライアント間での差異がある場合に出力されるようである。

■ /etc/ssh/sshd_config

SSHのサーバ側の設定ファイルは下記のように書いている。

Protocol 2

どうやらSSHv1で接続試行されているようである。試しに自身で接続してみてログが出力されるか確認する。

$ ssh -1 localhost
Protocol major versions differ: 1 vs. 2
$

ログには下記のように出力された。

Jan 24 19:17:12 host001 sshd[618]: Did not receive identification string from 127.0.0.1

接続試行が大量に来ているので、`iptables`でdropさせるかな…。

以上。

sudoで特定のコマンドだけパスワードなし

表題の通り。どう書くんだっけ?と調べ直したのでメモ書き。

■ 環境

  • Linux

■ visudo

`visudo`コマンドで編集する。今回の要件は下記。

  • あるユーザ(test1)にあるコマンド(command1)のみ実行可能とさせる
  • あるコマンド(command1)は複数箇所に存在するスクリプトファイルである
  • あるコマンド(command1)のみパスワード無しで実行させたい

実際に`visudo`コマンドで編集したのは下記の行になった。

test1 ALL=(ALL) NOPASSWD:/var/*/bin/command1

実行可能なコマンドのパスにワイルドカードが使えるのだな。便利だ。

以上。

Slackに改行を含むメッセージをcurlで送信

表題の通り。Slackの”Incoming Webhook“ではなく、”Web API“の “chat.postMessage“で改行を含むメッセージを`curl`で送りたい。node等で書いたアプリでは”chat.postMessage“相手でもあまり気にせず改行を含むメッセージを送れたのだが、スクリプトの中で`curl`コマンドを使用して送ろうとするとダメだったので自身の解決策を。

■ 環境

  • Slack
  • Linux

■ 結論

メッセージ(text)の中に改行を含むものは`curl`では送れなかった。しかし、自身の用途では改行以降は単なる一覧を追加したいだけだったので、”attachments“で実現が可能であった。”attachments“の”text“であれば、改行を含むメッセージもイメージ通りに改行されてSlackで表示されるようになった。

■ NG

$ curl -XGET "https://slack.com/api/chat.postMessage?token=${TOKEN}&channel=${CHANNEL}&text=${MESSAGE}&username=${USER}&iconemoji=${ICON}&link_names=1"

上記の”${MESSAGE}“に改行(¥n)を含んでいても、Slackで見ると改行はされずに文字列として”¥n“と表記されてしまう。

■ OK

もともとメッセージの改行以降は下記のように付加情報を一覧で出しているだけであった。

Hello World!!!
- 111
- 222

これを”NG“の時には下記のように表示されてしまう。

Hello World!!!¥n- 111¥n- 222

よって、この改行以降を”attachments“に分けてみた。

$ curl -XGET "https://slack.com/api/chat.postMessage?token=${TOKEN}&channel=${CHANNEL}&text=${MESSAGE}&attachments=${ATTACHMENTS}&username=${USER}&iconemoji=${ICON}&link_names=1"

attachments“に渡すのは下記のような文字列である。

[{"text":"- 111¥n- 222"}]

実際に`curl`に渡す時にはurlencodeをして渡している。

とすると、改行もされ思い通りのレイアウトで表示された。満足である。

以上。

■ 関連

AmazonLinuxにnkfをインストール

表題の通り。`nkf`コマンドを使用したかったのだが、レポジトリには存在しないのでインストールをしたメモ。

■ 環境

  • Amazon Linux

■ package

下記のように検索したが見つからない。

$ sudo yum search nkf

AmazonLinuxのレポジトリには`nkf`は存在しないようである。

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2016.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.09"
PRETTY_NAME="Amazon Linux AMI 2016.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2016.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
$

RHEL系のパッケージであればインストールは問題ないであろう。ということでCentOS6の`nkf`パッケージを探すことにした。CentOS6にしたのは下記ファイルを見たので。

$ cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
 :
$

探すと下記に存在した。

https://centos.pkgs.org/6/centos-x86_64/nkf-2.0.8b-6.2.el6.x86_64.rpm.html

ここからbinaryをダウンロードしてインストールを実施。

$ wget http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
$ sudo yum localinstall nkf-2.0.8b-6.2.el6.x86_64.rpm

これで`nkf`コマンドを利用できるようになった。

$ which nkf
/usr/bin/nkf
$

以上。

■ 関連

改行コード変換

stub_status

nginxにおいて表題のモジュールを試す。

■ 環境

  • Nginx 1.11.8
  • Docker for Mac 1.12.6
  • Mac OSX El Capitan

■ stub_status

設定ファイルを下記のように追加した。今回の環境では`/etc/nginx/conf.d/default.conf`にとりあえず追記して試している。

    location = /status {
        stub_status;
    }

入れているのは、”server“ディレクティブ内である。これでnginxを起動してアクセスしてみる。ちなみにDockerのnginxのコンテナは下記のように起動している。

docker run -ti --rm -p 8080:80 -v `pwd`/nginx.conf:/etc/nginx/nginx.conf nginx

アクセスしてみると下記のように取得できた。

$ curl localhost:8080/status
Active connections: 1
server accepts handled requests
5 5 8
Reading: 0 Writing: 1 Waiting: 0
$

たいした情報は得られないようで少々寂しい。

以上。

■ 関連