質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

1655閲覧

shellでsshをして、sshd_configを変更したい。

Yuiti628

総合スコア71

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2020/10/19 11:15

環境

クライアント: mac
VPS: ubuntu

困っていること

VPSに契約してから、設定までを全部shellに記入し自動がしようとしています。

クライアントpcからその、シェルスクリプトを実行し、sshで接続して、sshd_configを編集しようとして躓きました。

下記のコードでssh接続までは成功しました。この先の編集ができなく、情報もあまり見つからないので押して貰いたいです。

bash

1 2IP=xxx.xxx.xx.xx 3user=`user名` 4pw=`password` 5 6expect -c " 7set timeout 5 8spawn ssh -p 22 $user@$IP 9expect \"Password:\" 10send \"$pw\n\" 11interact 12" 13

接続後の流れ
1..sshを作成
2.接続後に、gitにある公開鍵を追加
3.sshd_configを編集

bash

1 2IP=xxx.xxx.xx.xx 3user=`user名` 4pw=`password` 5 6expect -c " 7set timeout 5 8spawn ssh -p 22 $user@$IP 9expect \"Password:\" 10send \"$pw\n\" 11interact 12 13#1. mkdir .ssh 14" 15 16#2. mkdir .ssh

1.だと

invalid command name "mkdir" while executing

でエラー

2.だとそもそも実行されずに、exitを入力して接続が解除されてからローカルで実行されます。

これはどうしたら解決できるのでしょうか?

また、shellでのファイルの編集はどうするのが一般的なのでしょうか?

追加だけなら

echo `内容` >> `ファイル名`

で可能でした。

しかし、sshd_configはからではないです。
最悪は1行ずつ全部足していこうとかなと考えていましたが、良い方法があれば教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidezzz

2020/10/19 11:31 編集

expectを使っても出来ないことはないとは思いますが、もしもサーバーに対して他の修正もするようなことを考えているのならばかなり手間がかかると思います。 このようなサーバに対する設定の自動化作業は「ansible」を始めとするプロビショニングツールを使うことが多く行われており、そちらの方面で調べるといろいろ情報が出てくるかと思います。 プロビショニングツールを使わない/使えない事情などがあったりしますか?
y_waiwai

2020/10/19 11:29

エラーが出るなら、エラーメッセージを提示しましょう
hentaiman

2020/10/19 11:38 編集

> hidezzzさん 質問者の前回の質問でansible回答したけどスルーしてるので使う気無いんじゃないですかね。 その際の条件には「ローカルから実行する」とは書いてなかったですけど。
otn

2020/10/19 12:01

「自動化したい」と「interactを入れている」は両立しないですが、全自動は望んでないということ?
Yuiti628

2020/10/19 12:07

>otnさん 目標は全自動です。interractが原因で止まっていたんですね。 それを抜いたら進んだのですが、 invalid command name "mkdir" while executing とエラー?が出て実行はされませんでした。 > hidezzzさん ありがとうございます。 https://qiita.com/syaadachi/items/8e6262de533bf09d2d2e を参考に設定しようと思います。
otn

2020/10/19 12:16 編集

> invalid command name "mkdir" そりゃ駄目です。expectのサブコマンドを書かないと。 mkdir .ssh ↓ expect \"シェルのプロンプト\" send \"mkdir .ssh\n\" expect \"シェルのプロンプト\"
guest

回答1

0

自己解決

ymlをこんな感じでできました〜

- hosts: vps vars: user_name: xxxxx password: xxxxxx tasks: - name: add user user: name: "{{user_name}}" password: "{{ password | password_hash('sha512') }}" state: present - name: make .ssh directoryhttps://teratail.com/questions/input file: path: /home/{{user_name}}/.ssh state: directory owner: "{{user_name}}" group: "{{user_name}}" mode: 0700 - name: copy ssh key shell: curl -sS https://github.com/suganumayuiti.keys >> /home/{{user_name}}/.ssh/authorized_keys - name: add sudoers. lineinfile: path: /etc/sudoers state: present regexp: "^%{{user_name}} ALL=" line: "%{{user_name}} ALL=(ALL) NOPASSWD: ALL" validate: '/usr/sbin/visudo -cf %s' - name: change sshd_config lineinfile: path: /etc/ssh/sshd_config state: present regexp: '{{ item.regexp }}' line: '{{ item.line }}' with_items: # 公開鍵 - regexp: '#PubkeyAuthentication yes' line: 'PubkeyAuthentication yes' # パスワードログイン - regexp: 'PasswordAuthentication yes' line: 'PasswordAuthentication no' # 画面ポップ用 - regexp: '#X11DisplayOffset 10' line: 'X11DisplayOffset 10' - regexp: '#X11UseLocalhost yes' line: 'X11UseLocalhost yes' - name: restart sshd systemd: name: sshd state: restarted

投稿2020/10/21 01:56

Yuiti628

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問