Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8211

Command not found: ssh.exeの原因と解決方法を解説(Mac)!AWS環境にて踏み台サーバー経由の多段接続を実装した時のエラーと解決方法 - taiPyのお悩み解決ブログ

$
0
0

はじめに

現在、個人開発や友人とのプロジェクトでインフラの構築が必要になったため、次の技術書でAWSの学習をしています。

入門書のp134、第6章、リスト6.1を参考にAWS環境上の踏み台サーバー経由で同環境内のウェブサーバーに多段接続でアクセスをしました。この際、エラーメッセージ(command not found: ssh.exe)が表示され、接続できませんでした。その時の対応記録として本記事を執筆しました。ご参考になれば幸いです。

多段接続についてはこちらの記事を参照してください。本記事の趣旨ではないため割愛します。これからは前提条件と環境について説明した後、より詳細に状況が伝わるようにエラーが起こるまでの手順を時系列で並べています。その後、エラーの原因とその解決方法について解説しています。

それでは解説スタートです。

目次

前提と環境について

  • PCはMacを使用
    • Apple M3
    • メモリ:8GB
  • 踏み台サーバーとWebサーバーはAWSの同一VPC内に存在。
    • 踏み台サーバーはバプリック環境に構築
    • Webサーバーはプライベート環境に構築
  • IPアドレスやルートテーブル、セキュリティグループ、コマンドのスペルなどは全て正しい前提
    • もしIPアドレスやルートテーブルの設定に不備がある場合は、別途解決する必要があり。本記事では解説していないが頻出のエラー。

AWS上にある踏み台サーバーとWebサーバーを図示すると次の通りです。

今回のAWS環境

やっていたこと(時系列)

AWSの技術習得を目的としてAWSで環境構築を実施。Webサーバーを作成した後、そのWebサーバーに踏み台サーバー経由でアクセスすることで、接続と稼働の確認を行おうとしていました。

具体的には、手元の端末(Mac)から、Public subnet内にある踏み台サーバー(bastion)経由でPriate subnet内にある二つのWebサーバー、web01とweb02へアクセスを試みていました。

より具体的な手順は次の通りです。

  • AWSで踏み台サーバー、Webサーバーを構築
  • 多段接続するためのconfigファイルを作成。

    • .sshフォルダ配下フォルダの構成
      .
      ├── config
      └── nakagaki.pem(この部分はお使いの認証設定によります)
    
    • configファイルの中身
      Host bastion
          HostName (踏み台サーバーのIPアドレス)
          User (踏み台サーバーのユーザー)
          IdentityFile ~/.ssh/(使用中のpemファイル)
    
      Host web01
          HostName (1つ目のWebサーバーのIPアドレス)
          User (1つ目のWebサーバーのIPアドレス)
          IdentityFile ~/.ssh/(使用中のpemファイル)
          ProxyCommand ssh.exe bastion -W %h:%p
    
      Host web02
          HostName (2つ目のWebサーバーのIPアドレス)
          User (2つ目のWebサーバーのIPアドレス)
          IdentityFile ~/.ssh/(使用中のpemファイル)
          ProxyCommand ssh.exe bastion -W %h:%p
    
  • Terminalでssh web01またはssh web02を入力し実行

    • この段階でcommand not found: ssh.exeエラー(今回解決したいエラー)が発生

それではエラーの原因とその解決方法について次から解説していきます。

エラーメッセージの原因について

エラーメッセージ:command not found: ssh.exe

エラーメッセージの原因はMacにssh.exeコマンドがないからです。

このメッセージはssh.exeコマンドがご利用中の端末にないですよと知らせてくれています。 入門書ではWindowsを基準にしていたためこのようなエラーに遭遇しました。Windowsだとssh.exeと書いていると動作しますが、Macの場合はsshにする必要があるんですね。

これはWindowsとMacの違いによるものです。

WindowsではSSH接続を使用するとき組み込みのSSHクライアントを使用します(こちらを参照。Windows ターミナル SSH | Microsoft Learn)。

そしてWindowsのSSHクライアントではssh.exeを使用しています(こちらを参照。SSH 経由の PowerShell リモート処理 - PowerShell | Microsoft Learn)。

一方でMacでSSH接続をする場合は、OpenSSHを使用しています。自身で使用しているMacでSSHのバージョンを調べたらOpenSSHでした。バージョンの調べかたは次のコマンドをTerminalで実行してください。ssh -V

そしてOpenSSHで使用しているSSHクライアントがsshです。OpenSSHの公式ページはこちら→ssh(1) - OpenBSD manual pages

まとめるとSSH接続時にはWidonwsではWindowsに組み込まれているSSHクライアント(ssh.exe)を使用し、MacではOpenSSHのSSHクライアント(ssh)を使用しています。そのため、Windowsではssh.exeと書けば動作しますが、Macではsshと書かなければ動作しません。

WindowsとMac、Linuxの違いを意識しながらトラブルシュートする必要性を改めて考えさせられた出来事でした。

原因がわかったため次に解決方法を解説します。

エラーメッセージ:の解決方法

ssh.exeの部分をsshに変更するとエラーが解決します。

具体的には多段接続するためのファイル(config)を「変更前」の箇所を「変更後」のように変更してください。変更前のssh.exesshに変更します。

変更前

ProxyCommand ssh.exe bastion -W %h:%p

変更後

ProxyCommand ssh bastion -W %h:%p

次にconfigファイルの全文を載せていますのでご参考にしてください。下記に記載のIPアドレスやユーザー名、.pem ファイルの名称がご自身の環境に合っていないとエラーの原因になりますのでご注意ください。()の部分をご自身の環境に置き換えてもらうと助かります。

変更後configファイルの全文

Host bastion
    HostName (踏み台サーバーのIPアドレス)
    User (踏み台サーバーのユーザー)
    IdentityFile ~/.ssh/(使用中のpemファイル)

Host web01
    HostName (1つ目のWebサーバーのIPアドレス)
    User (1つ目のWebサーバーのIPアドレス)
    IdentityFile ~/.ssh/(使用中のpemファイル)
    ProxyCommand ssh bastion -W %h:%p

Host web02
    HostName (2つ目のWebサーバーのIPアドレス)
    User (2つ目のWebサーバーのIPアドレス)
    IdentityFile ~/.ssh/n(使用中のpemファイル)
    ProxyCommand ssh bastion -W %h:%p

まとめ

command not found: ssh.exeが出たときは基本的に次の原因を疑ってみてください。

  • コマンドがあるか?
    • コマンドがない場合はインストール
  • 今回のようにWindowsとMacの違いによるもの

上記のエラー以外にも踏み台サーバーやWebサーバーに繋がらない原因としては次のものも考えられるため、参考になれば幸いです。

  • IPアドレス間違い
  • スペルミス
  • 名称が間違っている
  • ユーザー名が違う
    • 複数のユーザーや独自の環境設定を行なっている場合は特に当てはまりやすい
  • ファイルのパスが間違っている

以上、 ここまで読んでいただきありがとうございました。またお会いできることを楽しみにしています。

参考文献


Viewing all articles
Browse latest Browse all 8211

Trending Articles