ECSをCloud Shell から操作する

2019年5月29日からAlibaba Cloud コンソール上でCloud Shell を利用可能になりました。

1.Cloud Shell の利用イメージ

Alibaba Cloud コンソールにログインし、右上の方にアイコンが追加されています。

右上を拡大したのが下の画像になります。

さっそく使ってみましょう。アイコンをクリックします。

コンソールの下の方にシェルの実行画面が表示されます。

また、”Cloud Shell needs your permission to aquire a temporary credentials on your behalf. This credentials will expire in 1 hour. Please confirm it”との確認が求められます。 1時間限定での一時的な認可に関する確認です。 

OKをクリックします。15から30秒でシェルが起動するとのことなので待ちましょう。

利用可能な状態となりました。

2. Cloud Shell の環境について

“uname -a” コマンドで実行環境を確認します。 3.10系のLinux Kernelです。

また、Cloud shellの実行ユーザは”shell”です。idコマンドで確認すると以下の通りで一般ユーザの権限しかもっていません。

id コマンドの結果

shell@Alicloud:~$ id shell

uid=1000(shell) gid=1000(shell) groups=1000(shell)

また、ファイルシステムのマウント状況は以下の通りです。/home/shell は上海リージョンのNASをマウントしています。 ホームディレクトリ上のデータは保持されるようです。 SSHの鍵ファイルやその他独自に準備したコマンドやスクリプトを保存することで継続的に運用保守環境として利用できそうです。 まあ、インスタンスの実態は上海リージョンとなる点は気になります。自分で選択できるとよりよいですよね。

df コマンドの実行結果

shell@Alicloud:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 20510332 4571612 14873812 24% /
tmpfs 65536 0 65536 0% /dev
tmpfs 941108 0 941108 0% /sys/fs/cgroup
337de4b607-suh51.cn-shanghai.nas.aliyuncs.com:/ 1099511627776 0 1099511627776 0% /home/shell
/dev/vda1 20510332 4571612 14873812 24% /etc/hosts
shm 65536 0 65536 0% /dev/shm
tmpfs 941108 0 941108 0% /proc/acpi
tmpfs 941108 0 941108 0% /proc/scsi
tmpfs 941108 0 941108 0% /sys/firmware

3. SSHクライアントの利用

SSHクライアントは利用可能です。

通信経路はInternet 経由となり、 パブリックIPを持たないECS インスタンスにSSH接続できるわけでは無いことに注意が必要です。 

4. 利用できるコマンド

“echo $PATH”でコマンドの参照パスを確認します。 以下が初期設定です。

echo $PATH の実行結果

shell@Alicloud:~$ echo $PATH
/home/shell/.local/bin:/home/shell/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

/home/shell/.local/binと/home/shell/binは空っぽでしたが、ここに独自のコマンドを配置するとよいでしょう。

また、シェルは/bin/bashなので、独自に.bash_profileや.profileなどを準備してもよいでしょう。

参考までに/usr/sbin,/usr/bin,/sbin,/bin の中身も以下に転記しておきます。利用したいコマンドがあるか確認出来ると思います。

なお、一通りのコマンドはあるように見えてpingやtraceroute,nslookup,digは無いため疎通確認には使えません(別途、自分でコマンドを準備する必要あり)。また、man コマンドも利用できず色々と不便なところもあります。

/usr/sbin

addgnupghome
addgroup
add-shell
adduser
applygnupgdefaults
chgpasswd
chmem
chpasswd
chroot
cpgr
cppw
cron
delgroup
deluser
dpkg-preconfigure
dpkg-reconfigure
e2freefrag
e4crypt
e4defrag
fdformat
filefrag
groupadd
groupdel
groupmems
groupmod
grpck
grpconv
grpunconv
iconvconfig
invoke-rc.d
ldattach
locale-gen
mklost+found
newusers
nologin
pam-auth-update
pam_getenv
pam_timestamp_check
phpdismod
phpenmod
phpquery
policy-rc.d
pwck
pwconv
pwunconv
readprofile
remove-shell
rmt
rmt-tar
rtcwake
service
tarcat
tzconfig
update-ca-certificates
update-icon-caches
update-info-dir
update-java-alternatives
update-locale
update-mime
update-passwd
update-rc.d
useradd
userdel
usermod
validlocale
vigr
vipw
zic

/usr/bin
[
2to3-2.7
add-apt-repository
addpart
addr2line
apt
apt-add-repository
apt-cache
apt-cdrom
apt-config
apt-get
apt-key
apt-mark
ar
arch
as
awk
b2sum
base32
base64
basename
bashbug
c++
c89
c89-gcc
c99
c99-gcc
captoinfo
catchsegv
cautious-launcher
cc
c++filt
chage
chattr
chcon
chfn
chrt
chsh
cksum
clear
clear_console
cmp
comm
compose
composer
corelist
cpan
cpan5.26-x86_64-linux-gnu
cpp
cpp-7
c_rehash
crontab
csplit
ctags
ctags.emacs25
curl
cut
debconf
debconf-apt-progress
debconf-communicate
debconf-copydb
debconf-escape
debconf-set-selections
debconf-show
deb-systemd-helper
deb-systemd-invoke
delpart
dh_bash-completion
dh_nodejs
dh_pypy
dh_python2
dh_python3
diff
diff3
dircolors
dirmngr
dirmngr-client
dirname
dotlockfile
dpkg
dpkg-architecture
dpkg-buildflags
dpkg-buildpackage
dpkg-checkbuilddeps
dpkg-deb
dpkg-distaddfile
dpkg-divert
dpkg-genbuildinfo
dpkg-genchanges
dpkg-gencontrol
dpkg-gensymbols
dpkg-maintscript-helper
dpkg-mergechangelogs
dpkg-name
dpkg-parsechangelog
dpkg-query
dpkg-scanpackages
dpkg-scansources
dpkg-shlibdeps
dpkg-source
dpkg-split
dpkg-statoverride
dpkg-trigger
dpkg-vendor
du
dwp
ebrowse
ebrowse.emacs25
edit
editor
elfedit
emacs
emacs25
emacs25-x
emacsclient
emacsclient.emacs25
enc2xs
encguess
env
etags
etags.emacs25
ex
expand
expiry
expr
extcheck
factor
faillog
fallocate
fc-cache
fc-cat
fc-list
fc-match
fc-pattern
fc-query
fc-scan
fc-validate
find
flock
fmt
fold
free
funzip
g++
g++-7
gcc
gcc-7
gcc-ar
gcc-ar-7
gcc-nm
gcc-nm-7
gcc-ranlib
gcc-ranlib-7
gcov
gcov-7
gcov-dump
gcov-dump-7
gcov-tool
gcov-tool-7
gencat
getconf
getent
getopt
ginstall-info
git
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
gold
gpasswd
gpg
gpg-agent
gpgconf
gpg-connect-agent
gpgparsemail
gpgsm
gpgsplit
gpgv
gpg-wks-server
gpg-zip
gprof
groups
gtk-update-icon-cache
gyp
h2ph
h2xs
head
helpztags
hostid
i386
iconv
id
idlj
infocmp
infotocap
install
install-info
instmodsh
ionice
ipcmk
ipcrm
ipcs
ischroot
jar
jarsigner
java
javac
javadoc
javah
javap
jcmd
jdb
jdeps
jexec
jhat
jinfo
jjs
jmap
join
jps
jq
jrunscript
js
jsadebugd
json_pp
jstack
jstat
jstatd
kbxutil
keytool
killall
kr
krd
krgpg
krssh
last
lastb
lastlog
lcf
ld
ld.bfd
ldd
ld.gold
libnetcfg
link
linux32
linux64
locale
locale-check
localedef
logger
logname
lsattr
lsb_release
lscpu
lsipc
lslocks
lslogins
lsmem
lsns
lspgpot
lzcat
lzcmp
lzdiff
lzegrep
lzfgrep
lzgrep
lzless
lzma
lzmainfo
lzmore
m17n-db
make
make-first-existing-target
mawk
mcookie
md5sum
md5sum.textutils
mesg
migrate-pubring-from-classic-gpg
mkfifo
mtrace
mvn
mvnDebug
namei
native2ascii
nawk
newgrp
nice
nl
nm
node
node-gyp
nodejs
nohup
npm
nproc
nsenter
numfmt
objcopy
objdump
od
on_ac_power
openssl
orbd
pack200
pager
partx
passwd
paste
patch
pathchk
pdb
pdb2.7
pdb3
pdb3.6
peekfd
perl
perl5.26.1
perl5.26-x86_64-linux-gnu
perlbug
perldoc
perlivp
perlthanks
pgrep
phar
phar7.2
phar.phar
phar.phar7.2
php
php7.2
piconv
pinentry
pinentry-curses
pinky
pkill
pl2pm
pldd
pmap
pod2html
pod2man
pod2text
pod2usage
podchecker
podselect
pr
print
printenv
printf
prlimit
prove
prtstat
pslog
pstree
pstree.x11
ptar
ptardiff
ptargrep
ptx
pwdx
py3clean
py3compile
py3versions
pybuild
pyclean
pycompile
pydoc
pydoc2.7
pydoc3
pydoc3.6
pygettext
pygettext2.7
pygettext3
pygettext3.6
python
python2
python2.7
python3
python3.6
python3.6-config
python3.6m
python3.6m-config
python3-config
python3m
python3m-config
pyversions
qrencode
ranlib
rcp
readelf
realpath
rename.ul
renice
reset
resizepart
rev
rgrep
rimraf
rlogin
rmic
rmid
rmiregistry
rpcgen
rsh
runcon
run-mailcap
rview
rvim
savelog
schemagen
scp
script
scriptreplay
sdiff
see
select-editor
semver
sensible-browser
sensible-editor
sensible-pager
seq
serialver
servertool
setarch
setsid
setterm
sftp
sg
sha1sum
sha224sum
sha256sum
sha384sum
sha512sum
shasum
shred
shuf
size
skill
slabtop
slogin
snice
sort
sotruss
splain
split
sprof
ssh
ssh-add
ssh-agent
ssh-argv0
ssh-copy-id
ssh-keygen
ssh-keyscan
stat
stdbuf
strings
strip
sum
symcryptrun
tabs
tac
tail
taskset
tee
test
tic
timeout
tload
tmux
tnameserv
toe
top
touch
tput
tr
truncate
tset
tsort
tty
tzselect
ucf
ucfq
ucfr
unattended-upgrade
unattended-upgrades
unexpand
uniq
unlink
unlzma
unpack200
unshare
unxz
unzip
unzipsfx
update-alternatives
update-mime-database
uptime
users
utmpdump
vi
view
vim
vim.basic
vimdiff
vimtutor
vmstat
w
wall
watch
watchgnupg
wc
wget
whereis
which
who
whoami
w.procps
wsgen
wsimport
X11
x86_64
x86_64-linux-gnu-addr2line
x86_64-linux-gnu-ar
x86_64-linux-gnu-as
x86_64-linux-gnu-c++filt
x86_64-linux-gnu-cpp
x86_64-linux-gnu-cpp-7
x86_64-linux-gnu-dwp
x86_64-linux-gnu-elfedit
x86_64-linux-gnu-g++
x86_64-linux-gnu-g++-7
x86_64-linux-gnu-gcc
x86_64-linux-gnu-gcc-7
x86_64-linux-gnu-gcc-ar
x86_64-linux-gnu-gcc-ar-7
x86_64-linux-gnu-gcc-nm
x86_64-linux-gnu-gcc-nm-7
x86_64-linux-gnu-gcc-ranlib
x86_64-linux-gnu-gcc-ranlib-7
x86_64-linux-gnu-gcov
x86_64-linux-gnu-gcov-7
x86_64-linux-gnu-gcov-dump
x86_64-linux-gnu-gcov-dump-7
x86_64-linux-gnu-gcov-tool
x86_64-linux-gnu-gcov-tool-7
x86_64-linux-gnu-gold
x86_64-linux-gnu-gprof
x86_64-linux-gnu-ld
x86_64-linux-gnu-ld.bfd
x86_64-linux-gnu-ld.gold
x86_64-linux-gnu-nm
x86_64-linux-gnu-objcopy
x86_64-linux-gnu-objdump
x86_64-linux-gnu-python3.6-config
x86_64-linux-gnu-python3.6m-config
x86_64-linux-gnu-python3-config
x86_64-linux-gnu-python3m-config
x86_64-linux-gnu-ranlib
x86_64-linux-gnu-readelf
x86_64-linux-gnu-size
x86_64-linux-gnu-strings
x86_64-linux-gnu-strip
xargs
xjc
xsubpp
xxd
xz
xzcat
xzcmp
xzdiff
xzegrep
xzfgrep
xzgrep
xzless
xzmore
yes
zdump
zipdetails
zipgrep
zipinfo

/sbin

acpi_available
agetty
apm_available
badblocks
blkdiscard
blkid
blockdev
cfdisk
chcpu
ctrlaltdel
debugfs
dumpe2fs
e2fsck
e2image
e2label
e2undo
fdisk
findfs
fsck
fsck.cramfs
fsck.ext2
fsck.ext3
fsck.ext4
fsck.minix
fsfreeze
fstab-decode
fstrim
getty
hwclock
initctl
installkernel
isosize
killall5
ldconfig
ldconfig.real
logsave
losetup
mke2fs
mkfs
mkfs.bfs
mkfs.cramfs
mkfs.ext2
mkfs.ext3
mkfs.ext4
mkfs.minix
mkhomedir_helper
mkswap
on_ac_power
pam_extrausers_chkpwd
pam_extrausers_update
pam_tally
pam_tally2
pivot_root
raw
resize2fs
runuser
sfdisk
shadowconfig
start-stop-daemon
sulogin
swaplabel
swapoff
swapon
switch_root
sysctl
tune2fs
unix_chkpwd
unix_update
wipefs
zramctl

/bin

bash
bunzip2
bzcat
bzcmp
bzdiff
bzegrep
bzexe
bzfgrep
bzgrep
bzip2
bzip2recover
bzless
bzmore
cat
chgrp
chmod
chown
cp
dash
date
dd
df
dir
dmesg
dnsdomainname
domainname
echo
egrep
false
fgrep
findmnt
fuser
grep
gunzip
gzexe
gzip
hostname
kill
ln
login
ls
lsblk
mkdir
mknod
mktemp
more
mount
mountpoint
mv
nisdomainname
pidof
ps
pwd
rbash
readlink
rm
rmdir
run-parts
sed
sh
sh.distrib
sleep
stty
sync
tar
tempfile
touch
true
umount
uname
uncompress
vdir
wdctl
which
ypdomainname
zcat
zcmp
zdiff
zegrep
zfgrep
zforce
zgrep
zless
zmore
znew

5. 公式ドキュメント

公式のドキュメントのURLは以下になります。

https://jp.alibabacloud.com/help/doc-detail/90395.html?spm=a2c5t.11065259.1996646101.searchclickresult.7d0612efhOwMlY

最終更新日が2019/5/29となっていますが、まだ、英語での公開となっています。 ポイントを紹介します。

  • Cloud Shell は以前からのスタンドアロンアクセス(https://shell.aliyun.com)に加えて、Alibaba Cloud コンソールからもアクセス可能になった
  • 最大5つのCloud Shell を起動可能
  • 複数のCloud Shell を立ち上げてもCloud Shell の実体となるインスタンスは1つとなる
  • フォントやサイズを変更可能
  • コピーとペーストに大雨尾 
  • ページスクロールに対応
  • Cloud Shell のインスタンスの再起動が実行可能
  • ログアウト操作は必須では無く、ウィンドウを閉じても問題は無い(ウィンドウを閉じるとログアウト状態となる)
  • ログアウト後15分でCloud Shell のインスタンスはリリースされる
  • インスタンスがリリースされるとtempolary directory にあるデータはすべて消去される (/home/shell はNASにあるため消えない)

6. まとめ

今回の確認を行う前は、GCPのようにSSHの公開鍵認証まで自動設定され各VMに簡単にSSH接続できるようにAlibaba Cloud も機能アップしたのかなと期待しました。 しかし、実際には従来のCloud Shell 同様に上海リージョンにインスタンスが起動し、自分が管理するインスタンスへの接続はインターネット経由の接続でした。

今回のアップデートの利点は、Alibaba Cloud コンソールの認証に一本化されたことでしょうか。 今後のよりより進化に期待します。