20210213のLinuxに関する記事は9件です。

ラズパイ4BでSSH接続(Mac、最初からディスプレイなし、無線LANの場合)<後編>

(追記 2021/02/16 8.デスクトップの初期設定を追加しました。)

前編からの続きです。全体の流れは

1.必要な物をそろえる
2.microSDカードをSD Card Formaterで初期化
3.OSをダウンロードしてmicroSDカードにファイルを配置する
4.SSHを有効化する&ラズパイをWi-Fiに接続する準備
5.起動する(電源につなぐ)
6.SSH接続する(起動を確認)
7.VNC ViewerでGUI接続
8.デスクトップの初期設定

で、後編は 5.起動する からになります。

5.起動する(電源に繋ぐ)

Raspberry Pi4にMicroSDカードを挿して、USB-Cで給電し起動を行ってください。

緑のランプが点滅すればSDCardの読み込みが行われています。だんだん点滅が穏やかになってきたら正常に動いてるので、下記のSSH接続に移ってください。

6.SSH接続を行う

前回の記事でmicroSDCardにwpa_supplicant.confファイルが書いてあるので(ちなみにwpaはWi-Fi Protected Accessの略です)、ラズパイの電源を起動をしただけでラズパイとWiFiが繋がっている状態になります。その状態でMacからリモートでSSH接続を行います。

リモート接続するためにはラズパイのIPアドレスが必要になります。IPアドレスは、DHCPと呼ばれる仕組みによって自動的にラズパイに割り振られているので、ターミナルから調べます。

ターミナルで以下のコマンドを打ってください。

arp -a

そうするとこのような画面が出てきます。

スクリーンショット 2021-02-11 19.50.58.png

ここではIPアドレスが(192.168.3.7)でした。(もちろん各々の環境によって数字は変わります)

注意してほしいのはここではraspberrypiと表示されていますが、必ずしもraspberrypiと表示されているとは限りません。表示されてなくてもWiFi接続しているラズパイの場合もあります。それでも次のSSH接続で確認すれば問題ないので、これかな?と思うものがあればSSH接続を試してみてください。

ちなみに192.168.3.1とか192.168.3.255はルータかその辺です。
    
  
  

それでは大変長らくお待たせしました。いよいよSSH接続を行います。

接続のコマンドはターミナルで

ssh pi@各々のIPアドレス

になるので今回の場合は以下のようになります。

ssh pi@192.168.0.7

このように各自で調べたIPアドレスを書いてください。

そうするとパスワードを求められるのでraspberryと入力してください。(初期設定がユーザ名pi、パスワードraspberryになっています。)

もし、

スクリーンショット 2021-02-16 10.20.25.png

と表示されたらyesと入力してenterを押してください。

接続できれば一番下に

スクリーンショット 2021-02-16 10.14.22.png

と表示されます。これで成功です!やったね!!

ここまでくれば、峠は越えたと思って大丈夫です。後はさほど大変ではありません。

余談ですが、僕が初めて接続できたときは嬉しくて雄叫びを上げたっけなぁ。SDCard買い替えたりしたりして苦労しましたもの。。

  
 

それでは最後にVNCに移ります。

 

7.VNC viewerでGUI接続

VNCとは?
Virtual Network Computingの略
ネットワーク上の離れたコンピュータを遠隔操作ができるソフトウェア。デスクトップ画面で操作できる。
  
 
VNC viewerはこちらから無料ダウンロードできます。
 
 

ラズパイをSSH接続した状態で、

sudo raspi-config

と打ってください。そしたら下のような画面が出ます

スクリーンショット 2021-02-12 11.21.45.png

設定によって背景の色は違うかもしれませんが、書かれている単語が同じであれば問題ないです。

まずはVNCの設定をONにします。

3P3Yes

VNC接続をデフォルトに設定します(これをしないとエラーがでます。)

1S5B4

ラズパイのデスクトップのサイズです。

2D1好きなサイズ

(ちなみに僕はMac Book Proの13.3インチでDMT Mode 35 1280x1024 60Hz 5:4 にしています。ちょうどいい具合に使えています。) 
 

このツールをアップデートします。

8

このツールを終了します。

Finish

ここで一度ラズパイを再起動をします。「~ like to reboot now?」と聞かれたらyesを押します。

もし聞かれなかったら下のコマンドを入力してください。一度SSH接続からログアウトします。

sudo reboot

その後、reboot(再起動)するとssh接続が切れるのでまたssh pi@各々のIPアドレスでSSH接続を行い、VNC Viewer(こちらからインストールしてください)
を開き、上の方にある入力欄に先ほど入れた確認したIPアドレスを入力してください。

スクリーンショット 2021-02-16 0.20.43.png

(別日にこのスクショを撮ったのでIPアドレスが192.168.3.10となっていますが、気にしないで下さい。)

スクリーンショット 2021-02-16 0.21.20.png

この画面が出たらcontinueを押します。

スクリーンショット 2021-02-16 0.21.51.png

この画面が出たら、usernameにpi,passwordにraspberryと入力してOKを押してください。

スクリーンショット 2021-02-16 0.23.09.png

この画面が出ればVNC接続に成功です。続いて初期設定に移ります。
 
 

8.デスクトップの初期設定

先ほどの画面のWarningのところでOKを押すとこちらの画面になります。

スクリーンショット 2021-02-16 0.24.27.png

ここをNextで進んで、

スクリーンショット 2021-02-16 0.26.02.png

CountryでJapanを選択すると、自動的に上の画像のようになります。そしてNext。

スクリーンショット 2021-02-16 0.27.19.png

「pi」ユーザーのパスワードを変えます。好きなパスワードを設定してください。そしてNext。

スクリーンショット 2021-02-16 0.27.55.png

ここはチェックしなくて大丈夫です。デスクトップの周りに黒枠があれば、チェックすると再起動後に調整してくれるそうですが、後でも設定等でできるそうです。そしてNext。

スクリーンショット 2021-02-16 0.34.59.png

ここはWiFi設定です。自分の接続しているWiFiを選んでNext。

スクリーンショット 2021-02-16 0.35.54.png

ソフトウェアのアップデートです。Nextでアップデートしてください。自分の環境では10分弱くらいかかりました。

スクリーンショット 2021-02-16 0.46.00.png

終わればこの画面がでます。OKを押すとSet Up Complete!という画面が出てくるので、Restartを押して再起動を行うことで設定が反映がされます。

以上で終了です!お疲れ様でした。これでもう(セキュリティを気にしなければ)ラズパイで自由に遊べます。僕はWiFiで常につないでいるわけでは無かったので、この状態(流石にIPアドレスの固定はやったけど)でLチカとかやって遊んでました。

次回は最低限のセキュリティについて書きます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SSHログインした時や作業中にどのサーバにいるか分かりやすくする方法

前座

皆さんこんにちは。ハンズラボのサムです!
今回は複数サーバにSSHログインしてるとあるあるなネタです!

ターミナルでタブをいっぱい開いていると今自分がどのサーバにいるのか分からなくなる現象をどうにかしたい!

今回はこれを解決したいと思います。

設定方法

ログイン時のメッセージ設定

  • /etc/motdに下記を追加
    • サーバ名
    • ドメイン名
    • IPアドレス

   ___             ___          __  _             ____                       ___              __
  / _ | ___  ___  / (_)______ _/ /_(_)__  ___    / __/__ _____  _____ ____  / _ \_______  ___/ /
 / __ |/ _ \/ _ \/ / / __/ _ `/ __/ / _ \/ _ \  _\ \/ -_) __/ |/ / -_) __/ / ___/ __/ _ \/ _  / 
/_/ |_/ .__/ .__/_/_/\__/\_,_/\__/_/\___/_//_/ /___/\__/_/  |___/\__/_/   /_/  /_/  \___/\_,_/  
     /_/  /_/                                                                                   

Domain : Domain name
IP Address : Global IP Address

※AAはここで作れる (フォント : smslant)
https://aa.be-dama.com/

Amazon Linuxの時はmotdが自動更新されるので、設定で更新停止

sudo update-motd --disable

ターミナルの表示を変える

  • /etc/bashrcに下記を追記
    • 表示情報のホスト名をサーバ名にする

# Default Pronmpt Setting
#PS1="[\u@\h \W]\$"
PS1="[\u@AP-Prod \W]\$ "

\u@の後ろにサーバの名前を入れてください!

変更前

[centos@ip-172-31-1-1 ~]$

変更後

[centos@AP-Prod ~]$

以上になります!
どれも簡単に設定できて、サーバを間違えて操作ミスする可能性を減らしたり、確認作業をしやすくできるので是非試してみてください!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Proxy配下のDocker_備忘録

はじめに

最近は全く設計や構築ができず、ストレスのたまる毎日です。
休みの日くらい自分の好きなことをしようと思い、基礎学習を兼ねて構築を。
とりあえず、思いついたProxyとDocker環境の構築をやりました。

目的:ProxyとDockerの導入。Proxyを介した通信の確認。

Proxy

Proxyとは(Wikipedia抜粋)
プロキシProxyとは代理の意味である
インターネット関連で用いられる場合は特に内部ネットワークからインターネット接続を
行う際高速なアクセスや安全な通信などを確保するための中継サーバプロキシサーバ
指す

インターネットに直接接続させたくないサーバやPCのために、代わりに通信のやり取りします。
これによって、サーバ自身が直接外部アクセスすることがなくなり、セキュリティリスクを抑えることができます。
※Web業界には「リバースプロキシ」ってのも存在するらしいがここでは割愛

Docker

Dockerとは(Wikipedia抜粋)
コンテナ仮想化を用いてアプリケーションを開発配置実行するための
オープンソースソフトウェアあるいはオープンプラットフォームである

これだけ読んで理解できる人は相当頭が良い。。。。

とりあえず検索してみた。
Docker入門(第一回)~Dockerとは何か、何が良いのか~
docker01.jpg

OS上に環境を準備し、その上にアプリが稼働するための環境を提供。
仮想マシンとの違いはゲストOS領域。コンテナではOS領域が無い分動作が軽いようです。

とりあえずやってみた

環境をざっくりと整理
proxy_docker.png
①3台のサーバを用意
②1台はVPN用に準備(今回は説明省略)
③1台はProxy用。この子は外部アクセスの役目を持つので外部ネットワークと、クライアント用の内部ネットワークを持たせる
④今回クライアントはDockerの役割を持つ

※すべてCentOS8を採用。理由は単純、無償かつLinuxなので軽いし不要なリソース確保しなくすむ。

◆Proxy導入手順

いつもお世話になっているサイトから手順を拝借
Proxy/ロードバランサ [Squid : インストール]

◆Docker導入手順

せっかくなので、Proxyを介して導入。もちろん手順はいつもの。
コンテナ基盤 [Docker : インストール]

導入が終わったので、さっそくイメージデータをダウンロードしようとしたところ、トラブル発生しました。

エラーメッセージ1
Using default tag: latest                                                                                                                                                              
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:54586->[::1]:53: read: connection refused   

何てことはない。
Proxyのクライアント側の設定が間違っていたようです。(ネットワークアドレス間違い&設定リロード)
修正してリトライ。

エラーメッセージ2
Using default tag: latest                                                                                                                                                              
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record does not look like a TLS handshake                                               

まだ駄目なようです。
調べてみると、どうやらDocker用のProxy設定が漏れていたようなので、下記を参考に設定します。
VagrantをProxy経由で利用する [Dcoker]

無事イメージデータのダウンロード確認まで終わりました。
目的達成したので備忘録として残します。

おわりに

相変わらずProyxは厄介だなと痛感。ファイアウォールと同等に深く考えたくない理由もわかります。
しかし、セキュリティを意識する上では重要だし、案外Proxyを介した通信のトラフィックを見るのも面白いものだと感じます。
次は、コンテナ環境で何か試してみようと思います。

参考

https://www.server-world.info/query?os=CentOS_8&p=squid&f=1
https://www.server-world.info/query?os=CentOS_8&p=docker&f=1
https://qiita.com/daichannel/items/08e074a01e8ab41d52f7
https://cybersecurity-jp.com/security-measures/32171
https://knowledge.sakura.ad.jp/13265/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ProxyとDocker_備忘録

はじめに

最近は全く設計や構築ができず、ストレスのたまる毎日です。
休みの日くらい自分の好きなことをしようと思い、基礎学習を兼ねて構築を。
とりあえず、思いついたProxyとDocker環境の構築をやりました。

目的:ProxyとDockerの導入。Proxyを介した通信の確認。

Proxy

Proxyとは(Wikipedia抜粋)
プロキシProxyとは代理の意味である
インターネット関連で用いられる場合は特に内部ネットワークからインターネット接続を
行う際高速なアクセスや安全な通信などを確保するための中継サーバプロキシサーバ
指す

インターネットに直接接続させたくないサーバやPCのために、代わりに通信のやり取りします。
これによって、サーバ自身が直接外部アクセスすることがなくなり、セキュリティリスクを抑えることができます。
※Web業界には「リバースプロキシ」ってのも存在するらしいがここでは割愛

Docker

Dockerとは(Wikipedia抜粋)
コンテナ仮想化を用いてアプリケーションを開発配置実行するための
オープンソースソフトウェアあるいはオープンプラットフォームである

これだけ読んで理解できる人は相当頭が良い。。。。

とりあえず検索してみた。
Docker入門(第一回)~Dockerとは何か、何が良いのか~
docker01.jpg

OS上に環境を準備し、その上にアプリが稼働するための環境を提供。
仮想マシンとの違いはゲストOS領域。コンテナではOS領域が無い分動作が軽いようです。

とりあえずやってみた

環境をざっくりと整理
proxy_docker.png
①3台のサーバを用意
②1台はVPN用に準備(今回は説明省略)
③1台はProxy用。この子は外部アクセスの役目を持つので外部ネットワークと、クライアント用の内部ネットワークを持たせる
④今回クライアントはDockerの役割を持つ

※すべてCentOS8を採用。理由は単純、無償かつLinuxなので軽いし不要なリソース確保しなくすむ。

◆Proxy導入手順

いつもお世話になっているサイトから手順を拝借
Proxy/ロードバランサ [Squid : インストール]

◆Docker導入手順

せっかくなので、Proxyを介して導入。もちろん手順はいつもの。
コンテナ基盤 [Docker : インストール]

導入が終わったので、さっそくイメージデータをダウンロードしようとしたところ、トラブル発生しました。

エラーメッセージ1
Using default tag: latest                                                                                                                                                              
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:54586->[::1]:53: read: connection refused   

何てことはない。
Proxyのクライアント側の設定が間違っていたようです。(ネットワークアドレス間違い&設定リロード)
修正してリトライ。

エラーメッセージ2
Using default tag: latest                                                                                                                                                              
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record does not look like a TLS handshake                                               

まだ駄目なようです。
調べてみると、どうやらDocker用のProxy設定が漏れていたようなので、下記を参考に設定します。
VagrantをProxy経由で利用する [Dcoker]

無事イメージデータのダウンロード確認まで終わりました。
目的達成したので備忘録として残します。

おわりに

相変わらずProyxは厄介だなと痛感。ファイアウォールと同等に深く考えたくない理由もわかります。
しかし、セキュリティを意識する上では重要だし、案外Proxyを介した通信のトラフィックを見るのも面白いものだと感じます。
次は、コンテナ環境で何か試してみようと思います。

参考

https://www.server-world.info/query?os=CentOS_8&p=squid&f=1
https://www.server-world.info/query?os=CentOS_8&p=docker&f=1
https://qiita.com/daichannel/items/08e074a01e8ab41d52f7
https://cybersecurity-jp.com/security-measures/32171
https://knowledge.sakura.ad.jp/13265/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sshpassを使って、リモートシャットダウン

初めに

sshpassで、別端末をシャットダウンしたいといったときに使用。
気が向いたら、ループして複数端末対応も書く予定

フォルダ構成

c:\test\
├ shutdown.sh
└ passfile(パスワードを記載)

ソースファイル

passfile
hogehoge
shutdown.sh
password=$(<passfile)
sshpass -f passfile ssh -o "StrictHostKeyChecking no" user@hostname "echo ${password} | sudo -S poweroff"

※userはsshでログインするユーザーを記載
※hostnameは接続先を記載
※ユーザーはroot特権もちのやつを使う

参考

Shell Scriptを書くときのテクニック10選

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

50行でちゃんと動くリマインダーアプリ「Notification-CLI」をリリースしました

50行でちゃんと動くリマインダーアプリ「Notification-CLI」をリリースしました

以下かんたんな日本語版クイックスタートになります。

Minimalistic Command Line Notification Application under 50 Lines

50行で実装のシンプルなコマンドラインベースのリマインダーアプリケーション。

クイックスタート Quick Start

This will nofity you when 2021 February 20, PM 6:00.

以下で2021年2月20日18時に通知をします。

./noc.js -d 2021022018 --desktop

Very much minimalistic.

とてもミニマリスティック。

インストール Installation

git clone https://github.com/yuis-ice/notification-cli.git
cd notification-cli
chmod 755 ./noc.js
npm i

必要環境 Requirements

  • node.js v13.10.1 or higher
# node.js [nvm-sh/nvm](https://github.com/nvm-sh/nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
bash
nvm install v13.10.1
node -v

使用例 Examples

This will only notify you by command line console output:

コマンドライン出力で通知します。

./noc.js -d 2021022018

The output be like:

出力はこんな感じです。

$ ./noc.js -d 202102120234
2021-02-12T02:33:16+09:00 Jobs started...
2021-02-12T02:33:16+09:00 You will be notified at: 2021-02-12T02:34:00+09:00
2021-02-12T02:34:00+09:00 Notified.
$

You can abbreviate your seconds, minutes, hours and so on:

秒、分などを省略しても動きます。

./noc.js -d 2022

This will notify you when PM 11:00 in the day:

その日の23時になったら通知します。

./noc.js -d 23 --format HH

An alias makes your code much more minimalistic:

エイリアスを定義すると、よりシンプルになります。

alias notify="./noc.js --format MM,DD,HH" # Specifying absolute path recommended
notify -d 2,20,18

This will run your command:

シェルコマンド、外部コマンドも実行できます。

./noc.js -d 2021022018 -c "firefox.exe sound.mp3"

No logs on background be like:

バックグラウンドでマルチインスタンスに使用するのもいいですね。

./noc.js -d 2021022018 --desktop --hide-log --log "" &

My favorite format <3

僕のお気に入り。

./noc.js -d 2021022018 -c "firefox.exe sound.mp3" --desktop -t "your appointment soon"

コマンドラインオプション Command line Options

$ ./noc.js
Usage: notification-cli [options]

Options:
  -d, --date <date>             specify date to fire (e.g. "2022010100" for 2020/1/1 00:00) (default: null)     
  -f, --format <format>         specify date format (default: "YYYYMMDDHHmmss")
  -D, --desktop                 enables desktop notification
  -t, --title <text>            specify title (default: "Notification-CLI")
  -m, --message <text>          specify message (default: ":)")
  -c, --exec-command <command>  specify command to run (e.g. firefox.exe ringtone.mp3) (default: null)
  -l, --log <text>              specify console log message (default: "Notified.")
  -H, --hide-log                hide infomation logs
  -h, --help                    display help for command

一言

コードを書くよりreadmeを書く時間のほうが長くなってしまった例。

momentjsとnode-scheduleのおかげでimportやコマンドラインオプション部分を除くメインのコードはなんと10行程度で収まっています。

ソースコードを見られたら少し恥ずかしいかもしれない。対してソースコードのシンプリシティは初学者にとってそのコードを研究する敷居を低くしてくれると思うので、node.jsあるいはプログラミング初学者の人に積極的に参考にして頂ければ嬉しいと思う。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

lessコマンドでテキストを表示する時に行番号を表示する

目的

  • lessコマンドでファイルを開くときに行番号を付与する方法をメモ的にまとめる

方法1(ファイル展開時にオプションを付ける)

  • lessでファイルを開くときにオプション-Nを使用する
  • 下記のように実行する。

    $ less -N ファイル名
    

方法2(ファイル展開後に設定する)

  • lessを用いてファイルを展開している時に-Nを入力し「Enter」を押下することで行番号を表示する事ができる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【PowerShell】WindowsPCからLinux上のファイルをダウンロードする

前置き

今回は Putty を使用して WindowsPC から Linux サーバのファイルを取得するサンプルプログラムを紹介します。
毎日シェルの実行結果をとってくる単純作業を「自動化できたらいいな」と思い、作りました。
PowerShellから他のCLIツールにコマンドの実行について記載しているため、Putty 以外のツールをご利用されている方でも参考になるのではないかと思ってます。

別の記事でLinuxサーバのシェルを実行する記事も書かせていただいております。
一連の流れで「シェルの実行」 → 「実行結果ログのダウンロード」のような場合に使えると思いますので、是非見ていってください。
【PowerShell】WindowsPCからLinux上のShellファイルを実行する

シナリオ

1.ローカルに日付フォルダを作成する
2.PuttyでLinuxサーバにログイン
3.「1」で作成したフォルダに$TARGET_FILE_PATHのパターンに該当するファイルをダウンロード

サンプルプログラム

サンプルプログラムをコピーして、拡張子「.ps1」で保存してください。
下記のサンプルプログラムのConfig部分に必要な情報を入力してください。
基本的に下記の項目を見直していただきたいと思います。
$PUTTY_PATH
$USER_NAME
$IP_ADDRESS
$PASSWORD
$TARGET_FILE_PATH

GetLogFile.ps1

################################## Config ##################################

# 取得したいファイルのパターン用で使用
$NEW_DATE = Get-Date -Format "yyyyMMdd"

# 格納先フォルダ名で利用
$NEW_DATE_TIME = Get-Date -Format "yyyyMMdd_HHmmss"

# PUTTY情報
$PUTTY_PATH = "C:\Tools\PuTTY"
$PSFTP_PATH = Join-Path $PUTTY_PATH "psftp.exe"

# Linux接続情報
$USER_NAME = "user"
$IP_ADDRESS = "XX.XX.XX.XX"
$PASSWORD = "password"

<# 取得先設定
    今回のデフォルトは実行PowerShellと同一のフォルダ配下に
    日付フォルダを作成して、その中に取得したファイルを格納する
#>
$DOWNLOAD_PATH = Join-Path $PSScriptRoot $NEW_DATE_TIME

# 取得したいファイル名パターン
# 今回の例だと「/users/app」配下の「test_20210212_1111.log」などが取得できる
$TARGET_FILE_PATH = "/users/app/test_${NEW_DATE}*.log"

############################################################################

########################## 文字コードをUTF8に変更 ##########################
chcp 65001
############################################################################

############################# ファイル取得処理 #############################

# 格納先フォルダ作成・移動
if (!(Test-Path $DOWNLOAD_PATH)) {
    New-Item $DOWNLOAD_PATH -Type Directory
}
Set-Location $DOWNLOAD_PATH

# Linux上で実行したいコマンドを上から順番に記述
# mgetコマンドにすることでパターンが一致するものを取得できる。
# パターンに該当するファイルが複数存在する場合は全て取得する。
$executionCommadn = @(
    "mget ${TARGET_FILE_PATH}"
    , "exit"
)

# 配列に入っているコマンドを上から順番に実行する
$executionCommadn | & $PSFTP_PATH ${USER_NAME}@${IP_ADDRESS} -pw $PASSWORD

############################################################################

終わりに

今回はシェルの実行結果ログファイルをダウンロードする想定で書かせていただきました。
まぁ、使う機会は極めてまれだと思いますが、定例業務の効率化ができるので、よかったら試してみてください。

あと、Linuxサーバからダウンロードするファイルのファイル名に日本語が入っていると文字化けしてダウンロードされます。
すごく調べましが解決策がみつかりませんでした。
もしご存知の方がいらしたらコメントで教えてください!

ここまで読んでいただき、ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【PowerShell】WindowsPCからLinux上のShellファイルを実行する

前置き

今回は Putty を使用して WindowsPC から Linux サーバのシェルをキックするサンプルプログラムを紹介します。
決まった時間にシェルを実行する際はクーロンで事足りますが、手動実行したい時もあり、わざわざログインして実行するのがめんどくさかったため、PowerShellで自動化しました。
PowerShellから他のCLIツールにコマンドの実行について記載しているため、Putty 以外のツールをご利用されている方でも参考になるのではないかと思ってます。

別の記事でLinuxサーバのファイルをダウンロードする記事も書かせていただいております。
一連の流れで「シェルの実行」 → 「実行結果ログのダウンロード」のような場合に使えると思いますので、是非見ていってください。
【PowerShell】WindowsPCからLinux上のファイルをダウンロードする

シナリオ

1.PuttyでLinuxサーバにログイン
2.$EXECUT_FILE_PATHで指定したシェルを実行する

サンプルプログラム

サンプルプログラムをコピーして、拡張子「.ps1」で保存してください。
下記のサンプルプログラムのConfig部分に必要な情報を入力してください。
基本的に下記の項目を見直していただきたいと思います。
$PUTTY_PATH
$USER_NAME
$IP_ADDRESS
$PASSWORD
$EXECUT_FILE_PATH

ExecutShell.ps1

################################## Config ##################################

# PUTTY情報
$PUTTY_PATH = "C:\Tools\PuTTY"
$PLINK_PATH = Join-Path $PUTTY_PATH "plink.exe"

# Linux接続情報
$USER_NAME = "user"
$IP_ADDRESS = "XX.XX.XX.XX"
$PASSWORD = "password"

# 実行するシェルのパス
$EXECUT_FILE_PATH = "/users/app/test.sh"

############################################################################

########################## 文字コードをUTF8に変更 ##########################
chcp 65001
############################################################################

############################## シェル実行処理 ##############################

# Linux上で実行したいコマンドを上から順番に記述
<#
 ログイン直後はCLI上にゴミが初期値で競ってされており、
 配列[0]にLinuxコマンドを入力した場合、
 「 sh: コマンドが見つかりませんでした...」と出力された。
 サンプルプログラムでは、配列[0]に空白を入れることで回避している。
   ※ 空白を入れるとEnterを押したときと同じ動きをする
#>
$executionCommadn = @(
    ""
    , "sh ${EXECUT_FILE_PATH}"
    , "exit"
)

# 配列に入っているコマンドを上から順番に実行する
$executionCommadn | & $PLINK_PATH ${USER_NAME}@${IP_ADDRESS} -pw $PASSWORD

############################################################################

終わりに

今回は、シェルの実行についてでしたが、もちろん他のLinuxコマンドも利用できるので、是非、応用して使ってみてください。
ここまで読んでいただき、ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む