apt のリポジトリを削除する
Ubuntu(16.04) に Spotify をインストールしたのですが、何故かログインできなかったので削除します。
$ dpkg -l | grep -i spotify ii spotify-client 1:1.0.49.125.g72ee7853-111 amd64 Spotify streaming music client $ sudo apt remove spotify-client
リポジトリ登録時に鍵を追加していたので削除します。
$ apt-key list pub 4096R/D2C19886 2015-05-28 [有効期限: 2017-11-22] uid Spotify Public Repository Signing Key <operations@spotify.com> $ sudo apt-key del D2C19886 OK
apt-key list
で表示されるD2C19886の部分が apt-key del
で指定する key-id です。
リポジトリ登録情報を削除します。
$ ls /etc/apt/sources.list.d/ spotify.list spotify.list.save $ sudo rm -f /etc/apt/sources.list.d/spotify.list*
最後にsudo apt update
しておきます。
pyenv versions の出力で気になったこと
$ pyenv virtualenv 3.6.2 hoge
を実行したら、環境が作られたのは良いのですが、
$ pyenv versions system * 2.7.13 (set by /home/***/.pyenv/version) 3.6.2 3.6.2/envs/hoge hoge
hoge
だけでなく3.6.2/envs/hoge
も作らてしまって。
余計なものな気がして、気持ち悪かったので調べたら、hoge
は3.6.2/envs/hoge
のsymlinkとのことでした。
There are two entries for each virtualenv, and the shorter one is just a symlink. GitHub - pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)
確認したら、確かにsymlinkでした。
$ ls -l ${PYENV_ROOT}/versions 合計 8 drwxr-xr-x 6 *** *** 4096 8月 20 13:45 2.7.13 drwxr-xr-x 7 *** *** 4096 8月 20 13:35 3.6.2 lrwxrwxrwx 1 *** *** 42 8月 31 22:31 hoge -> /home/***/.pyenv/versions/3.6.2/envs/hoge
Catalyst の banner で変数が使えた
$(hostname) って書いてあった
会社の Catalyst をいじっていたら、banner に $(hostname)
と書いてある設定を見つけた。変数(トークンと言うらしい)使えたんだ。Catalyst 3550 と古い機種なので、ほとんどの機種で使えるのではないかな。
banner motd ^C --------------------------- Welcome to Catalyst Switch This switch is $(hostname) --------------------------- ^C
使えるトークンは他にもあるみたいだけど、MTU サイズとか banner で知らされても何が嬉しいのかしら。 www.cisco.com
Ansible でノート PC を構築するときの備忘
前情報
うちのノート PC は、OS に Lubuntu を使っています。壊れたりして、初期化が必要になったら、Lubuntu インストール後に Ansible を使って初期設定するようにしてます。
なお、初期化に必要な設定ファイル(.vimrcとか、.tmux.confとか)は、bitbucketに置いています。Ansible playbook も bitbucket に置いてます。
今回試した環境(2017/5/1)
- Lubuntu 16.04.2 LTS
- ansible 2.3.0.0
Ansible を実行するために
Lubuntu をインストール後に、Ansible を実行するまでの手順が必要です。そこは、自動化できないので、備忘として記載しておきます。
SSHD インストール
Lubuntu には openssh-server が入っていないので、インストールします。
$ sudo apt install openssh-server
Ansible インストール
まずは、どのversionがインストールされるか確認
$ sudo apt show ansible
バージョンが2.1.0以上であることを確認します。 2.1.0より低かったり、パッケージが見つからない場合は、リポジトリを追加します。
$ sudo apt-add-repository ppa:ansible/ansible $ sudo apt update
その後、インストールして、バージョンを確認します。
$ sudo apt install ansible $ ansible --version
bitbucket の SSH key 作成
Ansible playbook 内で設定ファイルをgit cloneするときに必要なため、SSH鍵を作成して bitbucket に登録しておきます。bitbucket専用の鍵にしたいので、鍵の移動と名前も変更しておきます。
$ ssh-keygen $ mkdir ~/.ssh/bitbucket/ $ mv ~/.ssh/id_rsa* ~/.ssh/bitbucket/ $ cd ~/.ssh/bitbucket/ $ mv id_rsa bitbucket.id_rsa $ mv id_rsa.pub bitbucket.id_rsa.pub
bitbucket.id_rsa.pub
をbitbucketのSSH keyとして登録します。その後、~/.ssh/config
にコンフィグを記載しておきます。
Host bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/bitbucket/bitbucket.id_rsa User git
Ansible playbook ダウンロード
構築用のAnsible playbookをどこかのディレクトリに適当に配置
SSH でのアクセス設定
SSH Agentを起動し、自ホスト向けの鍵を登録しておきます。
$ ssh-keygen $ eval `ssh-agent` $ ssh-add ~/.ssh/id_rsa
自ホストからのSSHアクセス用の公開鍵を登録します。
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
SSH鍵で自ホストにログインできることを確認、うまく言っていればパスワードを聞かれずにログインできます。
$ ssh <user>@127.0.1.1
playbook 実行
playbookのディレクトリに移動し、以下を実行。site.ymlの設定を確認して、対象のホストに間違いがないかは見ておく必要ありです。
ansible-playbook -i production site.yml --ask-sudo-pass
Networkで使われているIP Addressをbashで調べる方法
Networkで使われているIP Addressをbashで調べる方法
nmapかarp-scanを入れたら簡単にできるらしいですが、bashで行けないかなと思いました。
pingを全IP Addressに送信して、arpを見ればいけそう。
# for i in `seq 1 254`; do ping -c1 192.168.10.${i} > /dev/null & done # arp アドレス HWタイプ HWアドレス フラグ マスク インタフェース 192.168.10.1 ether xx:xx:xx:xx:xx:xx C wlp1s0 192.168.10.2 ether yy:yy:yy:yy:yy:yy C wlp1s0
自分のSSH 使い方変遷
自分がこれまでに辿った、SSHの使い方を整理してみる。
SSH 原始時代
愚直にパスワードを入力してログインしてた頃。-lでユーザを指定するより、@で指定するのが覚えやすかったため、@を使用する派。
$ ssh <user>@<remote-host> Password: <remote-host> $
SSH 石器時代
前時代の方法だと、ログインするたびにパスワードを入力しないといけなくて、それだと手間なので、公開鍵認証を覚えた。
公開鍵認証では、公開鍵をリモートホストに事前に登録しておけば、以降はローカルホストの秘密鍵を指定して接続すればパスワードなしでログインできる。自分としては、公開鍵というより公開錠前と考えたほうがイメージし易かった。公開錠前を接続したいホストにコピーして配布して、秘密鍵で公開錠前を開けるイメージ。
ssh-keygenコマンドで作成される~/.ssh/id_rsaが秘密鍵、~/.ssh/id_rsa.pubが公開鍵。パスフレーズの入力が求められるが、これは秘密鍵を使うためのもので、リモートとのやり取りには関与しないらしい。zipにかけるパスワードのようなものなので、なくても良いはず。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again:
公開鍵のリモートホストへの登録は、公開鍵(~/.ssh/id_rsa.pub)の内容を、リモートホストの~/.ssh/authorized_keysに追記することで実施する。~/.ssh/authorized_keysがない時は、新規作成して、パーミッションを600に設定する。このあたりの処理はssh-copy-idを使うと、リモートホストのauthorized_keysへの書き込みを自動で実施してくれる。
$ ssh-copy-id <user>@<remote-host> /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/<user>/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys <user>@<remote-host>'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '<user>@<remote-host>'" and check to make sure that only the key(s) you wanted were added.
SSH 青銅器時代
前時代の方法だと、ログインするときに秘密鍵を指定しないといけない。それに、ユーザ名とリモートホストを入力するのも面倒になってきた。
$ ssh -i ~/.ssh/id_rsa <user>@<remote-host>
それだと手間なので、~/.ssh/configに設定を書くことを覚えた。
Host remote-host HostName <remote-host> IdentityFile ~/.ssh/id_rsa User <user>
これでタイプする量が減って、かなり楽になった。
$ ssh remote-host
SSH 鉄器時代
秘密鍵に設定できるパスフレーズもあったほうが良い気がしてきた。かと言って、接続のたびにパスフレーズを打つ気にはならない。
なので、ssh-agentを使うことを覚えた。
ssh-agentを起動して、ssh-agentに秘密鍵を渡しておくと、以降の秘密鍵を使用する際にパスフレーズを入れる必要がなくなる。
まずは、ssh-agentを起動する。
$ eval `ssh-agent`
ssh-agentに秘密鍵を追加、それと秘密鍵を持っているかを確認する。
$ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/<user>/.ssh/id_rsa: Identity added: /home/<user>/.ssh/id_rsa (/home/<user>/.ssh/id_rsa) $ ssh-add -l 2048 SHA256:f4l2f1eJfZnICjvpEfmV3KsiE2Xat7eYn3leJOnLGv1 /home/<user>/.ssh/id_rsa (RSA)
さらにssh-agentが強力なのが、リモートホストに秘密鍵を持ってきてくれる機能。ssh-agentが秘密鍵を持ってきてくれるので、踏み台サーバの先にいる目的のリモートホストに公開鍵を登録しておけば、パスワードなしでログインできる。
ssh利用時に-Aオプションを付けると、ssh-agentがリモートホストに秘密鍵を持ってきてくれる。なお、-Aオプションを入れるのが億劫な場合は、.ssh/configにForwardAgent yes
を追加しておくと良い。
$ ssh -A remote-host remote-host$ ssh-add -l 2048 SHA256:f4l2f1eJfZnICjvpEfmV3KsiE2Xat7eYn3leJOnLGv1 /home/<user>/.ssh/id_rsa (RSA)
ssh-agent起動は、.bashrcに書いておいて自動実行すると良いらしい。なお、ssh-agentは、OS起動時に既に起動している場合があるので、その場合ssh-agentの起動は実行不要。
# start SSH agent ssh-add -l &>/dev/null if [ "$?" == 1 ]; then test -r ~/.ssh-agent && \ eval "$(<~/.ssh-agent)" >/dev/null ssh-add -l &>/dev/null if [ "$?" == 1 ]; then (umask 066; ssh-agent > ~/.ssh-agent) eval "$(<~/.ssh-agent)" >/dev/null fi fi
あと、以下のaliasを書いておけば、初回のssh実行時にのみssh-addを実行できるので便利。
# add ssh-add to SSH command alias ssh='ssh-add -l &>/dev/null || ssh-add && unalias ssh; ssh'
おわりに
SSHについては、まだまだ知らないだけで進化の余地ありそう。暇があれば調査してみたいと思う。