ITカメラマン忘備録

写真撮るのが趣味なエンジニア見習いの忘備録。

scpにはまるパターン

ちょっとはまったのでscpにはまるパターンを調べてみた

環境

詳細は前の記事参照

  • 前提条件としてsshは接続できている
  • クライアントのssh/configは以下
Host sakura
        HostName        IPAddress
        Port            10022
        IdentityFile    ~/.ssh/sakura_rsa
        User            hoge
  • やりたいことはVPS(sakura)にユーザーhogeで接続し、/home/hoge/test以下にローカルのファイルをコピーしたい

はまりどころ

コピー先のパスが適切ではない

やったこと
scp ローカルファイル sakura:/test
結果
scp: /test: Permission denied

解決策
  • コピー先をルートからのパスで記載
    scp ファイルパス sakura:/home/hoge/test
  • もしくは~つける
    scp ファイルパス sakura:~/test

リモートホストにscpがインストールされていない

  • ほとんどのディストリビューションはscpはクライアントパッケージに含まれる
  • サーバーパッケージだけがインストールされている場合はssh接続はできるがscpはできない
  • インストールしているけどパス通っていないとかも同様
  • さくらのVPS(標準)は特に意識しなくても大丈夫
解決策
  • クライアントパッケージをインストールする
    # yum install openssh-clients

ssh接続時に何かしらの出力がある

  • scpはsshの標準出力を横取りしてファイルのコピーを行っている
  • ssh接続時に何か表示するような設定をしていると、エラーになる可能性がある
解決策
  • 以下のコマンド打って何か表示されるか確認
    ssh sakura /bin/true
  • 何も表示されなければOK
  • 何か表示される場合は.bashrcとか調べてみる
  • さくらのVPS(標準)は特に意識しなくても大丈夫

所感

自分が引っかかったのは1つめのやつ。
ssh接続しているユーザーのカレントディレクトリからでいいじゃない。
そしてコピー先のパスが間違ってもPermission deniedと出るのね。。。
エンジニア力が低いとこういう細かいところに時間を食ってしまう・・・精進せねば

まぁでもこういうところで躓きながらやると、すーっと使うよりは覚えるのでいい経験かな(ポジティブ)

参考

自力で解決したけど他のはまるパターンは最近出てた以下の書籍が大変参考になった。
OpenSSH [実践] 入門

一歩進んだ使い方とか載っててsshバリバリな人にもオススメできる。

さくらのVPS借りた時のはじめの設定

無料お試しで2週間使えるとのことだったのでさわさわした時の設定。
sshは公開鍵で認証し、セキュリティは最低限のみ設定。

環境

[VPS]

  • さくらのVPS(v3) 2G
  • CentOS release 6.6 (Final)

[クライアント]

1. rootのパスワード変更から作業ユーザー作成まで

rootのパスワード変更

[root@host ~]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

作業用ユーザー作成

[root@host ~]# useradd hoge
[root@host ~]# passwd hoge
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

2. ユーザーhogeをグループに追加し、グループがsudoとsuを実行できるようにする

ユーザーhogeをwheelに追加し、wheelグループがsudoコマンドを実行できるようにする

[root@host ~]# usermod -G wheel hoge
[root@host ~]# visudo
--
# %wheel  ALL=(ALL)       NOPASSWD: ALL
↑先頭の#を削除

suコマンドをwheel内のユーザーだけが実行できるようにする

[root@host ~]# vi /etc/pam.d/su
--
#auth           required        pam_wheel.so use_uid
↑先頭の#を削除

参考
なぜ sudo する権限のあるグループが「 wheel 」という名前なのか
suについて(wiki)

3. ssh接続するための作業ディレクトリ作成

rootからログアウト

[root@host ~]# exit
logout
CentOS release 6.6 (Final)
Kernel 2.6.32-504.1.3.el6.x86_64 on an x86_64

hogeでログインしてルートに入れるか確認した後にhogessh用のディレクトリ作成

host login:hoge
Password:
[hoge@host ~]$ sudo su
[root@host hoge]# exit
[hoge@host ~]$
[hoge@host ~]$ mkdir /home/hoge/.ssh
[hoge@host ~]$ chmod 700 /home/hoge/.ssh
[hoge@host ~]$ ls -al /home/hoge
drwx------  2 hoge hoge 4096 Nov 15 22:55 .ssh

chmod 700
所有者はディレクトリに対してあらゆる操作が可能。所有者以外はディレクトリに対する操作は一切不可(ディレクトリ内を見ることはできない)

4. macにて公開鍵を作成

鍵を作成

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): /Users/hoge/.ssh/sakura_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

作成した鍵の確認

$ ls -al /Users/hoge/.ssh
-rw-------   1 hoge  staff  1766 11 16 01:47 sakura_rsa
-rw-r--r--   1 hoge  staff   420 11 16 01:47 sakura_rsa.pub

公開鍵をmacからscpでvpsに配置

$ scp ~/.ssh/sakura_rsa.pub hoge@[IP Address]:/home/hoge/.ssh

5. vpsにて公開鍵の設定

scpで送信された公開鍵を設定

[hoge@host ~]$ cd /home/hoge/.ssh
[hoge@host ~]$ cat id_rsa.pub >> authorized_keys 
[hoge@host ~]$ chmod 600 authorized_keys

sshd_configファイルの設定

[hoge@host ~]$ sudo vi /etc/ssh/sshd_config
--
Port 10022
↑10022に変更
--
PermitRootLogin no
↑rootでsshのログイン禁止
--
PasswordAuthentication no
↑パスワード認証を無効
--
PubkeyAuthentication yes
↑鍵認証を有効
--

sshを再起動

[hoge@host ~]$ sudo /etc/init.d/sshd restart

6. macにて./ssh/configファイルの設定

$ vi /Users/hoge/.ssh/config
--
Host sakura
      HostName      IP Address
      Port          10022
      IdentityFile  ~/.ssh/sakura_rsa
      User          hoge
--

7. macからssh接続してみる

$ ssh sakura

8. iptablesの設定

設定を追加

[hoge@host ~]$ sudo su
*データを持たないパケットの接続を破棄
[root@host hoge]# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

*SYNflood攻撃と思われる接続を破棄
[root@host hoge]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

*ステルススキャンと思われる接続を破棄
[root@host hoge]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

*localhostからの通信を許可
[root@host hoge]# iptables -A INPUT -i lo -j ACCEPT
  
*localhostからのpingを許可
[root@host hoge]# iptables -A INPUT -p icmp -j ACCEPT

*利用するポート番号を許可
[root@host hoge]# iptables -A INPUT -p tcp -m tcp --dport 10022 -j ACCEPT

*確立済みの通信を許可
[root@host hoge]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

*許可した通信以外のサーバに受信するパケットを拒否
[root@host hoge]# iptables -P INPUT DROP

*サーバから送信するパケットを許可
[root@host hoge]# iptables -P OUTPUT ACCEPT

*iptablesの設定を設定ファイルに保存
[root@host hoge]# service iptables save

iptablesの設定を確認

[root@host hoge]# iptables -L

iptablesの再起動

[root@host hoge]# /etc/init.d/iptables restart

おまけ

証明書認証を利用したい

  • 証明書認証はOpenSSH5.4からなので最新バージョンにあげる
    ※CentOS6でのOpenSSHのデフォルトバージョンは5.3
    • ssh -vsshのバージョン確認
  • 最新は本家で確認
  • 証明書認証をやろうとしてOpenSSHを6.7にあげようとしたがビルドに失敗したので調査せねば・・・

公開鍵認証について

  • 公開鍵からペアの秘密鍵を探すのは困難だが、今後マシンの性能が上がってくると安全とは言えなくなる
  • 秘密鍵が第三者に漏れてしまった場合、パスフレーズを解読される可能性がある
    • パスフレーズ秘密鍵に設定されているので制限なく秘密鍵に対して攻撃される恐れがある
    • 攻撃はオフラインで行われるため、こちらが攻撃を受けていることを知る術がない
  • OpenSSH-6.5から bcrypt KDF という鍵のフォーマットが追加され、鍵を生成するための計算に時間がかかるようになった

Atom触ってみた

公式

インストール

インストール自体は前書いた記事でやってるが念のため

  • 公式から落とすか、homebrew-cask使うか

homebrew-caskで

brew cask install atom

さらっと触ってみて

  • すごくSublime Textです。
    • 似ているから乗り換えるのは楽か?
  • 拡張の多さはSublimeかな。
    • といってもエディタはてんこ盛りにしない派なのであまり気にならない
  • フリーソフトウェア(MIT License)なのが良い。
  • Ctrl+Shift+mでmarkdownプレビュー出せるの良い。
    • まぁ見なくて書けるけど体裁とかね

Term2入れる

別タブとかでターミナルを動かせるとのこと

apm(atom package manager)使って入れる

apm install term2

インストール自体はいけたみたいだけどショートカットで起動しない・・・
※パッケージの実体はあるけどAtomのPackages見てもない

結局AtomのPackagesから入れた

Packages > Settings View > Install Packages から
term2と検索してインストール

Term2使う

ctrl+alt+右矢印で起動

  • 日本語は文字化けしてたが気にしないことにする
  • 触った範囲はMarkdownをPandocでHTMLに変換して、
    open叩いてブラウザーからレビューするとか移動やファイル操作くらい
  • Pandocよく使うからすげー便利になった感ある

所感

乗り換えます

  • といってもSublimeからの乗り換え
  • Markdown書くときはMouと並行して使っていくかなぁ。
    • やはりMouは美しい(重要)
  • vimプラグインVim Modeがあるから入れてみようかしら

備考

atom term2でぐぐってたらTerm2のインストールに結構はまってる人いた

AtomにTerm2を入れた時に若干ハマった話
Atom エディタ Term2 パッケージインストールでエラーが出た
Atom に Term2 を導入しました

homebrew-caskが便利じゃった

今更ながらbrew cask がすげー便利だった。
ますますパッケージ管理が捗る。

ざっくり

Cask

  • dmgとかをbrewで落とせる拡張
  • ネイティブアプリもbrew installとかbrew upgradeいける
  • ただしAppStore経由でしかインストールできないものは無理

インストール

homebrew-cask

brew install caskroom/cask/brew-cask

簡単!

brew cask searchで一覧出るがすげーいっぱいあった

とりあえずbrew cask で入れたアプリ

  • Atom
    brew cask install atom
    Github純正のエディタ。SublimeTextからの乗り換えを検討中。
    GithubMarkdownと相性抜群(Pandoc拡張しか使わないけど・・・)

Neovim入れた

Neovim

インストール

homebrewで
brew install --HEAD https://raw.github.com/neovim/neovim/master/neovim.rb

他環境とか詳細はここにのってる

実行

nvim

動いた(感動)

設定ファイルは.nvimrc

どこまでplugin使えるかわからないけど
そこまでvim使ってなかったから完全に乗り換えていいかも

Homebrew入れた

Homebrew

下記記事を参考に入れた
パッケージ管理システム Homebrew

準備

java

javaと叩いて入っていなかったんでインストールしますかのダイアログからそのままインストール

Xcode+Command Line Toolsをインストール

  • Xcodeは少し前からアップデートでこけていたので新規入れ直した
  • Command Line Toolsは以下から
    xcode-select --install

Homebrewインストール

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew doctorの実施

インストールの一般的な問題をチェックする
brew doctor

XQuartzが古いとか不要ファイルがあるとか言われたんで一つ一つ解決方法みて解消

使い方

  • パッケージのインストール
    brew install [formula]
  • パッケージのアンインストール
    brew uninstall[formula]
  • formulaの更新
    brew update
  • cellarの更新
    brew upgrade
  • ヘルプ
    man brew
    brew help
    brew home [formula]

情報は割と多い印象。
これからガシガシ使っていこうと思う

Pandocの簡単なお作法的な

入出力

  • ファイルが指定されていないとstdin/stdoutに
  • ただし odt,docx,epub,epub3はstdoutに出力されない
  • ファイルに出力したいときは -o オプション

フォーマットを明示的に指定

  • 入力は -r-f
  • 出力は -w-t
  • 明示しなくても拡張子から推測してくれる
  • 不明だと入力がMarkdown、出力がHTMLとして扱われる

対応しているMarkdown

  • markdown(Pandoc拡張)
  • markdown_strict(オリジナル)
  • markdown_phpextra(PHP Markdwon Extra)
  • markdown_github(Github)

拡張文法の有効/無効

  • フォーマットの末尾に+/- 拡張機能
  • markdown_strict+pipe_tablesだったら
    • オリジナルmarkdownにパイプテーブル追加
    • 実際に使うときは以下な感じ
      pandoc -o -t html out.html -f markdown_strict+pipe_tables in.md

オプション例

  • --toc
    • 自動的に生成された目次を出力
    • 見出しレベル1~3まで目次に含まれる
  • --toc-depth=x
    • 目次に含める見出しレベルを指定することができる
  • --columns=x
    • 一行あたりの文字数を指定してその文字数で折り返される

Pandoc標準Markdown以外の拡張例

  • lists_without_preceding_blankline
    • 段落の後に空行置かずにリスト
  • hard_line_breaks
    • 段落内の全ての改行が強制改行に
  • ignore_line_breaks
    • 段落内の全ての改行が無視される
  • autolink_bare_uris
    • リンクを囲まなくてもリンクに変換

使用例

  • 強制改行つけたGithubMarkdownからスタンドアロンHTML5cssと目次つける
    pandoc -s --toc -c hoge.css -t html5 -o output.html -f markdown_github+hard_line_breaks input.md

参考

Pandoc ユーザーズガイド 日本語版