[Linux] ssh

sshログイン

$ ssh -i ~/.ssh/{秘密鍵} {ユーザー名}@{接続先IP} -p {ポート番号}

~/.ssh/config

リモートサーバーへssh接続する際に利用される設定ファイル。

▼設定例

ServerAliveInterval 57

#############################################
## Project: xxx
#############################################
Host %dev-bastion-xxx
    HostName xx.xxx.xx.xxx
    User developer
    IdentityFile "/Users/{USER_NAME}/.ssh/path/to/{秘密鍵}"
    TCPKeepAlive yes
    IdentitiesOnly yes

“Host” の頭にプレフィックスをつけるとわざわざ “~/.ssh/config” 内を覗かずに “ssh xxx” が可能。
例えば “Host %xxx” とすると “ssh {TAB}” で補完が可能。

接続

$ ssh %dev-bastion-xxx

転送

$ scp ./test.html %dev-bastion-xxx:/home/developer/

認証鍵の生成

$ ssh-keygen -t rsa -C ""

ssh接続ユーザーの作成

[ec2-user ~]$ sudo adduser newuser
[ec2-user ~]$ sudo su - newuser
[newuser ~]$
[newuser ~]$ mkdir .ssh
[newuser ~]$ chmod 700 .ssh
[newuser ~]$ touch .ssh/authorized_keys
[newuser ~]$ chmod 600 .ssh/authorized_keys
# 任意のテキストエディタで authorized_keys ファイルを編集し、取得したキーペアのパブリックキーをファイルに貼り付ける。

トラブルシューティング

Permission denied

エラー確認
/var/log/secure

 60 Sep 29 15:44:32 xxx sshd[12334]: Accepted publickey for {User_Name} from xx.xx.xx.xx port 28579 ssh2: RSA xx:xx:xx:a9:2d:c7:1c:c9:c7:a5:28:db:xx:xx:xx:xx
 61 Sep 29 15:44:32 xxx sshd[12334]: pam_unix(sshd:session): session opened for user {User_Name} by (uid=0)
 62 Sep 29 15:52:48 xxx sudo:      {User_Name} : TTY=pts/0 ; PWD=/home/{User_Name} ; USER=root ; COMMAND=/bin/su -
 63 Sep 29 15:52:48 xxx su: pam_unix(su-l:session): session opened for user root by {User_Name}(uid=0)
  • ~/.ssh/authorized_keysの確認
  • ディレクトリ権限の確認
    • /home/{User_Name}/.ssh: 0700
    • /home/{User_Name}/.ssh/authorized_keys: 0600

.zshrc

Local zsh 環境の設定

# -------------------------------------
# Variables
# -------------------------------------

export LANG=ja_JP.UTF-8

# MySQL
#export PATH="/usr/local/opt/mysql@5.5/bin:$PATH"

# Docker
export DOCKER_HOST=tcp://xxx.xxx.xx.xxx:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/Users/okamoto/.docker/machine/machines/default

# Homebrew
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# terraform
export PATH="$HOME/.tfenv/bin:$PATH"

# OpenSSL
export PATH=/usr/local/Cellar/openssl/1.0.2j/bin:$PATH

# PHP
#export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"

# Python
export PATH="/usr/local/opt/python/libexec/bin:$PATH"

# virtualenv
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
export VIRTUALENVWRAPPER_PYTHON=/usr/local/opt/python/libexec/bin/python
source /usr/local/bin/virtualenvwrapper.sh

# nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH

# JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home -v 9`

# Go
export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
export NDK_ROOT=$HOME/go/pkg/gomobile/android-ndk-r10e

# Homebrewで入れたアプリのインストール先を~/Applicationsから/Applicationsへ変更
export HOMEBREW_CASK_OPTS="--appdir=/Applications"

EDITOR=vim; export EDITOR

# -------------------------------------
# zshオプション
# -------------------------------------

# 補完機能の強化
autoload -U compinit
compinit

# コマンド間違いに"もしかして"
setopt correct

# 色をセット
setopt prompt_subst

# バックグラウンドジョブが終了したら通知
setopt no_tify

# 重複コマンドをヒストリに追加しない
setopt hist_ignore_dups

# ディレクトリ名を入力するだけでcd
setopt auto_cd

# 補完で小文字でも大文字にマッチ
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# 日本語ファイル名を表示可能に
setopt print_eight_bit

# beep を無効に
setopt no_beep

# フローコントロールを無効に
setopt no_flow_control

# sudo の後のコマンドでエイリアスを有効に
alias sudo='sudo '

# プロンプトに色を付ける
autoload -U colors; colors

# cd後、自動的にls
function chpwd() { ls -1a }


# -------------------------------------
# Alias
# -------------------------------------

alias l="ls -ulta"
alias la="ls -la"
alias l1="ls -1"
alias ll="ls -auF"
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i -v'
alias mkdir='mkdir -p'
alias history='history -1000'
alias knife="bundle exec knife"
alias gem="bundle exec gem"

# grepでヒットした文字列を強調
alias grep="grep --color"

# tree
## N: 文字化け防止 C:色をつける
alias tree="tree -NC"


# -------------------------------------
# Reserve
# -------------------------------------

# 履歴ファイル保存
export HISTFILE=${HOME}/.zsh_history

# メモリに保存する履歴件数
export HISTSIZE=100000

# 履歴ファイルに保存する履歴件数
export SAVEHIST=100000

# 重複を記録しない
setopt hist_ignore_dups

# 開始と終了を記録
setopt EXTENDED_HISTORY

# 同時に起動したzshの間でヒストリを共有する
setopt share_history

# スペースから始まるコマンド行はヒストリに残さない
setopt hist_ignore_space

# ヒストリに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks

# ヒストリに実行時刻を記録
#setopt extended_history

# cdとタイプしなくても、移動
setopt AUTO_CD

# cdの履歴を保持(同一のディレクトリは重複排除)
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS

# history に実行時刻を記録
export HISTTIMEFORMAT='%y/%m/%d %H:%M:%S '

# -------------------------------------
# Visual
# -------------------------------------

# Prompt
autoload -U colors; colors
PROMPT="%F{cyan}[%n@%m](%*%) %~ %# %f"

# ctrl+a とかが効くように
bindkey -e

関連記事

.bashrcと.bash_profile