CloudOps Orchestration Service (OOS) adalah layanan otomatisasi operasi dan pemeliharaan dari Alibaba Cloud yang membantu Anda mengelola serta menjalankan tugas operasional. Anda dapat membuat template untuk mendefinisikan tugas, urutan eksekusi, parameter input, dan output, lalu menggunakan template tersebut untuk menjalankan tugas secara otomatis.
Login tanpa kata sandi berbasis SSH banyak digunakan dalam otomatisasi operasi dan pemeliharaan, memungkinkan pengelolaan sejumlah besar server dengan aman dan efisien. Jika Anda memiliki banyak instance Elastic Compute Service (ECS), Anda dapat mengonfigurasi login tanpa kata sandi untuk beberapa atau semua instance tersebut. Topik ini menjelaskan cara menggunakan OOS untuk mengonfigurasi login tanpa kata sandi pada sejumlah besar instance ECS.
Pastikan instance ECS tersedia. Jika tidak ada instance yang tersedia, belilah instance ECS. Untuk informasi lebih lanjut, lihat Memulai.
Pengguna yang digunakan untuk terhubung ke instance ECS tempat Anda ingin mengonfigurasi login tanpa kata sandi harus sama.
Hanya instance ECS berbasis Linux yang didukung.
Prosedur
Masuk ke Konsol OOS.
Tambahkan pengguna yang digunakan untuk terhubung ke instance ECS tanpa kata sandi. Jika pengguna telah ditambahkan, lewati langkah ini. Jika tidak ada pengguna yang tersedia, Anda dapat mengeksekusi skrip untuk menambahkan pengguna ke instance ECS di halaman Operasi Instansi Massal konsol OSS. Gambar berikut menunjukkan detailnya.

Buat template.
Dalam contoh ini, sebuah template digunakan untuk mengonfigurasi login tanpa kata sandi untuk instance ECS. Untuk informasi lebih lanjut tentang template, lihat bagian Lampiran 1: Template untuk Login Tanpa Kata Sandi dari topik ini.
Salin skrip dan tempelkan ke dalam kotak input, lalu klik Buat Template. Template ini digunakan untuk memilih dan mendapatkan kunci publik dari beberapa instance ECS. Anda perlu memilih instance ECS tempat Anda ingin mengonfigurasi login tanpa kata sandi, serta mengonfigurasi kunci publik untuk pengguna tertentu.
Jalankan template.
Di halaman Template Kustom, temukan template yang Anda buat pada langkah sebelumnya dan klik Buat Eksekusi di kolom Tindakan. Di halaman Buat, konfigurasikan informasi dasar tentang template dan klik Langkah Berikutnya: Pengaturan Parameter.
Konfigurasikan parameter di langkah Pengaturan Parameter. Anda dapat memilih instance ECS secara manual atau menentukan tag untuk memilih instance ECS. Gambar berikut menunjukkan detailnya.

Klik Langkah Berikutnya: OK. Konfirmasikan parameter dan klik Buat. Kemudian, Anda dapat menjalankan template.

Setelah template dijalankan, periksa apakah konfigurasi login tanpa kata sandi berlaku.
Hubungkan ke instance ECS tempat login tanpa kata sandi dikonfigurasi. Jalankan perintah ssh menggunakan pengguna tersebut. Dengan cara ini, Anda dapat terhubung ke instance ECS lain tanpa perlu memasukkan kata sandi. Gambar berikut menunjukkan contohnya. Perintah su dijalankan untuk beralih ke pengguna freelogin. Perintah ssh dijalankan sebagai pengguna freelogin untuk terhubung ke instance ECS lain. Ini menunjukkan bahwa login tanpa kata sandi berlaku.
Lampiran 1: Template untuk login tanpa kata sandi
Tabel berikut menjelaskan parameter yang diperlukan dalam template.
Parameter | Deskripsi |
regionId | ID wilayah kluster. |
sourceTarget | Instance ECS yang kunci publiknya diperlukan untuk login tanpa kata sandi. |
destinationTarget | Instance ECS tempat Anda ingin mengonfigurasi login tanpa kata sandi. |
userName | Nama pengguna yang digunakan untuk terhubung ke instance ECS. |
rateControl | Rasio konkurensi eksekusi tugas. |
OOSAssumeRole | Peran RAM yang digunakan oleh OOS. |
Skrip berikut menunjukkan isi dari template:
FormatVersion: OOS-2019-06-01
Description:
en: 'Dalam instance, pengguna terhubung tanpa enkripsi melalui kunci otorisasi.'
Parameters:
regionId:
Type: String
Description:
en: ID wilayah.
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
sourceTarget:
Type: Json
Description:
en: Contoh mendapatkan kunci publik bebas rahasia saat mengonfigurasi login bebas rahasia.
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: 'ALIYUN::ECS::Instance'
RegionId: regionId
destinationTarget:
Type: Json
Description:
en: Perlu membuka instance login tanpa kata sandi.
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: 'ALIYUN::ECS::Instance'
RegionId: regionId
Default:
Type: ResourceIds
ResourceIds: []
userName:
Description:
en: Nama pengguna login tanpa kata sandi di instance.
Type: String
rateControl:
Description:
en: Rasio konkurensi eksekusi tugas.
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 10
OOSAssumeRole:
Description:
en: Peran RAM yang diasumsikan oleh OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: getSourceInstance
Description:
en: Dapatkan instance yang perlu login tanpa kata sandi.
Action: 'ACS::SelectTargets'
Properties:
ResourceType: 'ALIYUN::ECS::Instance'
RegionId: '{{ regionId }}'
Filters:
- '{{ sourceTarget }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
- Name: getDestinationInstance
Description:
en: Lihat instance ECS yang dapat diakses via ssh tanpa kata sandi.
Action: 'ACS::SelectTargets'
Properties:
ResourceType: 'ALIYUN::ECS::Instance'
RegionId: '{{ regionId }}'
Filters:
- '{{ destinationTarget }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
- Name: generateOrGetPublicKey
Action: 'ACS::ECS::RunCommand'
Description:
en: Hasilkan atau dapatkan kunci publik.
Properties:
regionId: '{{ regionId }}'
commandContent: |-
#!/bin/bash
username="{{ username }}"
if [ $username == root ]; then
if [ ! -e "/root/.ssh/id_rsa.pub" ]; then
ssh-keygen -f "/root/.ssh/id_rsa" -P "" >> /dev/null
fi
cat /root/.ssh/id_rsa.pub
else
if [ ! -e "/home/$username/.ssh/id_rsa.pub" ]; then
su $username -l -c "ssh-keygen -f /home/$username/.ssh/id_rsa -P '' >> /dev/null"
fi
chmod 700 /home/$username/.ssh
cat /home/$username/.ssh/id_rsa.pub
fi
instanceId: '{{ ACS::TaskLoopItem }}'
commandType: RunShellScript
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getSourceInstance.instanceIds }}'
Outputs:
publicKeys:
AggregateType: 'Fn::ListJoin'
AggregateField: publicKey
Outputs:
publicKey:
Type: String
ValueSelector: invocationOutput
- Name: converPublicKeyToStr
Action: 'ACS::ECS::SMCConversionConstantByJqScript'
Description:
en: Konversikan kunci publik menjadi string.
Properties:
parameter:
'Fn::Jq':
- First
- 'join(",")'
- '{{ generateOrGetPublicKey.publicKeys }}'
jqScript:
- '.[0] | .'
- '.[0] | .'
Outputs:
publicKey:
Type: String
ValueSelector: 'firstValue | split(",") | join("\n")'
- Name: authorizedInstances
Action: 'ACS::ECS::RunCommand'
Description:
en: Aktifkan login tanpa kata sandi untuk pengguna di instance.
Properties:
regionId: '{{ regionId }}'
commandContent: |-
#!/bin/bash
username="{{ username }}"
publicKey="{{ converPublicKeyToStr.publicKey }}"
if [ $username == root ]; then
if [ ! -e "/root/.ssh/id_rsa.pub" ]; then
ssh-keygen -f "/root/.ssh/id_rsa" -P "" >> /dev/null
fi
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
else
if [ ! -e "/home/$username/.ssh/id_rsa.pub" ]; then
su $username -l -c "ssh-keygen -f /home/$username/.ssh/id_rsa -P '' >> /dev/null"
fi
chmod 700 /home/$username/.ssh
cat /home/$username/.ssh/id_rsa.pub >> /home/$username/.ssh/authorized_keys
fi
if [ $username == root ]; then
cat >> /root/.ssh/authorized_keys << eof
$publicKey
eof
else
cat >> /home/$username/.ssh/authorized_keys << eof
$publicKey
eof
fi
instanceId: '{{ ACS::TaskLoopItem }}'
commandType: RunShellScript
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getDestinationInstance.instanceIds }}'
Outputs:
commandOutputs:
AggregateType: 'Fn::ListJoin'
AggregateField: commandOutput
Outputs:
commandOutput:
Type: String
ValueSelector: invocationOutput
Outputs:
commandOutputs:
Type: List
Value: '{{ generateOrGetPublicKey.publicKeys }}'