{"id":34960,"date":"2024-09-06T14:08:39","date_gmt":"2024-09-06T07:08:39","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/06\/use-cloud-init-to-write-to-a-file\/"},"modified":"2024-09-06T14:08:39","modified_gmt":"2024-09-06T07:08:39","slug":"use-cloud-init-to-write-to-a-file","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/06\/use-cloud-init-to-write-to-a-file\/","title":{"rendered":"S\u1eed d\u1ee5ng Cloud-Init \u0111\u1ec3 ghi d\u1eef li\u1ec7u v\u00e0o t\u1ec7p"},"content":{"rendered":"<p><a href=\"https:\/\/cloudinit.readthedocs.io\/en\/latest\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">Cloud-init<\/a>&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ti\u00eau chu\u1ea9n c\u00f4ng nghi\u1ec7p t\u1ef1 \u0111\u1ed9ng kh\u1edfi t\u1ea1o m\u00e1y ch\u1ee7 v\u00e0 c\u00f3 h\u1ed7 tr\u1ee3 ph\u00e2n ph\u1ed1i ch\u00e9o, \u0111a n\u1ec1n t\u1ea3ng. Trong khi n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y cung c\u1ea5p cloud-init si\u00eau d\u1eef li\u1ec7u \u0111\u1ec3 tri\u1ec3n khai m\u00e1y ch\u1ee7, d\u1eef li\u1ec7u ng\u01b0\u1eddi d\u00f9ng t\u00f9y ch\u1ec9nh cho ph\u00e9p b\u1ea1n l\u1eadp tr\u00ecnh h\u1ea7u h\u1ebft m\u1ecdi kh\u00eda c\u1ea1nh c\u1ee7a qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o m\u00e1y ch\u1ee7.<\/p>\n<p><a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/metadata\/\">D\u1ecbch v\u1ee5 Metadata<\/a>&nbsp;c\u1ee7a Akamai&nbsp;cho ph\u00e9p b\u1ea1n t\u1eadn d\u1ee5ng cloud-init \u0111\u1ec3 tri\u1ec3n khai Compute Instances. S\u1eed d\u1ee5ng t\u1eadp l\u1ec7nh cloud-config, b\u1ea1n c\u00f3 th\u1ec3 x\u00e1c \u0111\u1ecbnh m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n, t\u1eeb b\u1ea3o m\u1eadt v\u00e0 thi\u1ebft l\u1eadp ng\u01b0\u1eddi d\u00f9ng \u0111\u1ebfn c\u00e0i \u0111\u1eb7t ph\u1ea7n m\u1ec1m v\u00e0 th\u1ef1c thi t\u1eadp l\u1ec7nh shell.<\/p>\n<p>Trong h\u01b0\u1edbng d\u1eabn n\u00e0y, h\u00e3y t\u00ecm hi\u1ec3u c\u00e1ch s\u1eed d\u1ee5ng t\u1eadp l\u1ec7nh cloud-config \u0111\u1ec3 ghi t\u1ec7p v\u00e0o m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n trong qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o. T\u1ef1 \u0111\u1ed9ng h\u00f3a qu\u00e1 tr\u00ecnh t\u1ea1o v\u00e0 ch\u1ec9nh s\u1eeda t\u1ec7p \u0111\u1ec3 c\u1ea5u h\u00ecnh ph\u1ea7n m\u1ec1m v\u00e0 h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n ch\u00ednh x\u00e1c nh\u01b0 b\u1ea1n c\u1ea7n ngay t\u1eeb \u0111\u1ea7u.<\/p>\n<p>Tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u, h\u00e3y xem l\u1ea1i h\u01b0\u1edbng d\u1eabn c\u1ee7a ch\u00fang t\u00f4i v\u1ec1 c\u00e1ch&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/configure-and-secure-servers-with-cloud-init\/\">s\u1eed d\u1ee5ng Cloud-Init \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh v\u00e0 b\u1ea3o m\u1eadt m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n<\/a>&nbsp;. \u1ede \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 xem c\u00e1ch t\u1ea1o t\u1ec7p cloud-config, t\u1ec7p m\u00e0 b\u1ea1n c\u1ea7n l\u00e0m theo c\u00f9ng v\u1edbi h\u01b0\u1edbng d\u1eabn n\u00e0y. Khi b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng tri\u1ec3n khai cloud-config, h\u01b0\u1edbng d\u1eabn \u0111\u01b0\u1ee3c li\u00ean k\u1ebft \u1edf tr\u00ean s\u1ebd n\u00eau chi ti\u1ebft c\u00e1ch th\u1ef1c hi\u1ec7n.<\/p>\n<h2 id=\"write-to-a-file\">Ghi v\u00e0o m\u1ed9t t\u1eadp tin<a href=\"https:\/\/www.linode.com\/docs\/guides\/write-files-with-cloud-init\/#write-to-a-file\"><\/a><\/h2>\n<p>Cloud-init bao g\u1ed3m m\u1ed9t m\u00f4-\u0111un \u0111\u1ec3 ghi t\u1ec7p, s\u1eed d\u1ee5ng&nbsp;<code>write_files<\/code>t\u00f9y ch\u1ecdn trong t\u1eadp l\u1ec7nh cloud-config c\u1ee7a b\u1ea1n. M\u00f4-\u0111un n\u00e0y cung c\u1ea5p thi\u1ebft l\u1eadp \u0111\u01a1n gi\u1ea3n nh\u1ea5t khi b\u1ea1n mu\u1ed1n t\u1ea1o t\u1ec7p m\u1edbi ho\u1eb7c ghi \u0111\u00e8 t\u1ec7p hi\u1ec7n c\u00f3 trong qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o.<\/p>\n<p>Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>write_files<\/code>t\u00f9y ch\u1ecdn n\u00e0y s\u1ebd l\u1ea5y m\u1ed9t \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p, t\u1ea1o t\u1ec7p m\u1edbi ho\u1eb7c ghi \u0111\u00e8 t\u1ec7p hi\u1ec7n c\u00f3 t\u1ea1i \u0111\u00edch \u0111\u00e3 cho. Cloud-init c\u0169ng t\u1ea1o b\u1ea5t k\u1ef3 th\u01b0 m\u1ee5c cha n\u00e0o ch\u01b0a t\u1ed3n t\u1ea1i.<\/p>\n<p>Sau \u0111\u00e2y l\u00e0 v\u00ed d\u1ee5 t\u1ea1o t\u1ec7p HTML:<\/p>\n<pre class=\"wp-block-code\"><code>write_files:\n  - path: \/var\/www\/html\/example.com\/index.html\n    content: |\n      &lt;html&gt;\n      &lt;body&gt;\n        &lt;h1&gt;Hello, World!&lt;\/h1&gt;\n        &lt;p&gt;Welcome to the example web page!&lt;\/p&gt;\n      &lt;\/body&gt;\n      &lt;\/html&gt;      \n    owner: 'root:root'\n    permissions: '0644'<\/code><\/pre>\n<p>V\u00ed d\u1ee5 n\u00e0y \u0111\u1ecbnh ngh\u0129a m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c n\u1ed9i dung t\u1ec7p c\u0169ng nh\u01b0 c\u00e1c chi ti\u1ebft nh\u01b0 quy\u1ec1n s\u1edf h\u1eefu v\u00e0 quy\u1ec1n. Sau \u0111\u00e2y l\u00e0 ph\u00e2n t\u00edch s\u00e2u h\u01a1n v\u1ec1 nh\u1eefng g\u00ec&nbsp;<code>write_files<\/code>c\u1ea5u h\u00ecnh v\u00ed d\u1ee5 n\u00e0y th\u1ef1c hi\u1ec7n:<\/p>\n<ul>\n<li><code>path<\/code>tr\u1ecf \u0111\u1ebfn v\u1ecb tr\u00ed cho t\u1ec7p \u0111\u00e3 t\u1ea1o. B\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o hi\u1ec7n c\u00f3 t\u1ea1i v\u1ecb tr\u00ed \u0111\u00f3 \u0111\u1ec1u \u0111\u01b0\u1ee3c ghi \u0111\u00e8 v\u00e0 c\u00e1c th\u01b0 m\u1ee5c cha \u0111\u01b0\u1ee3c t\u1ea1o khi c\u1ea7n thi\u1ebft. \u0110\u00e2y l\u00e0 t\u00f9y ch\u1ecdn b\u1eaft bu\u1ed9c duy nh\u1ea5t cho&nbsp;<code>write_files<\/code>.<\/li>\n<li><code>content<\/code>\u0111\u1ecbnh ngh\u0129a n\u1ed9i dung cho t\u1ec7p. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t d\u00f2ng ho\u1eb7c nh\u01b0 tr\u00ean, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng \u0111\u1ecbnh d\u1ea1ng YAML ph\u00f9 h\u1ee3p cho n\u1ed9i dung t\u1ec7p nhi\u1ec1u d\u00f2ng. Vi\u1ec7c b\u1ecf&nbsp;<code>content<\/code>t\u00f9y ch\u1ecdn n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t t\u1ec7p tr\u1ed1ng.<\/li>\n<li><code>owner<\/code>t\u00f9y ch\u1ecdn cho ph\u00e9p b\u1ea1n x\u00e1c \u0111\u1ecbnh ng\u01b0\u1eddi d\u00f9ng v\u00e0\/ho\u1eb7c nh\u00f3m \u0111\u1ec3 ch\u1ec9 \u0111\u1ecbnh quy\u1ec1n s\u1edf h\u1eefu t\u1ec7p. M\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<code>root:root<\/code>. \u0110\u1ec3 ch\u1ec9 \u0111\u1ecbnh ng\u01b0\u1eddi d\u00f9ng v\u00e0\/ho\u1eb7c nh\u00f3m \u0111\u01b0\u1ee3c t\u1ea1o trong t\u1eadp l\u1ec7nh cloud-config, b\u1ea1n n\u00ean s\u1eed d\u1ee5ng t\u00f9y&nbsp;<code>defer: true<\/code>ch\u1ecdn, nh\u01b0 \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 th\u00eam b\u00ean d\u01b0\u1edbi, \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o ng\u01b0\u1eddi d\u00f9ng\/nh\u00f3m \u0111\u01b0\u1ee3c t\u1ea1o tr\u01b0\u1edbc t\u1ec7p.<\/li>\n<li><code>permissions<\/code>t\u00f9y ch\u1ecdn ch\u1ec9 \u0111\u1ecbnh quy\u1ec1n c\u1ee7a t\u1ec7p. S\u1eed d\u1ee5ng \u0111\u1ecbnh d\u1ea1ng&nbsp;<code>0###<\/code>where&nbsp;<code>###<\/code>l\u00e0 k\u00fd hi\u1ec7u b\u00e1t ph\u00e2n nh\u01b0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u1edbi&nbsp;<code>chmod<\/code>. B\u1ea1n c\u00f3 th\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 quy\u1ec1n v\u00e0 k\u00fd hi\u1ec7u b\u00e1t ph\u00e2n trong h\u01b0\u1edbng d\u1eabn c\u1ee7a ch\u00fang t\u00f4i v\u1ec1 c\u00e1ch&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/modify-file-permissions-with-chmod\/#using-octal-notation-syntax-with-chmod\">S\u1eeda \u0111\u1ed5i Quy\u1ec1n c\u1ee7a T\u1ec7p b\u1eb1ng chmod<\/a>&nbsp;.T\u1ea1i \u0111\u00e2y,&nbsp;<code>permissions<\/code>c\u1ea5p cho ng\u01b0\u1eddi d\u00f9ng ch\u1ee7 s\u1edf h\u1eefu quy\u1ec1n \u0111\u1ecdc-ghi (&nbsp;<code>6--<\/code>), quy\u1ec1n \u0111\u1ecdc cho nh\u00f3m ng\u01b0\u1eddi d\u00f9ng (&nbsp;<code>-4-<\/code>) v\u00e0 quy\u1ec1n \u0111\u1ecdc cho t\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng kh\u00e1c (&nbsp;<code>--4<\/code>).<\/li>\n<\/ul>\n<p>M\u1ed9t&nbsp;<code>defer<\/code>t\u00f9y ch\u1ecdn b\u1ed5 sung c\u00f3 th\u1ec3 h\u1eefu \u00edch khi b\u1ea1n mu\u1ed1n tr\u00ec ho\u00e3n vi\u1ec7c t\u1ea1o t\u1ec7p cho \u0111\u1ebfn giai \u0111o\u1ea1n cu\u1ed1i c\u00f9ng c\u1ee7a qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o cloud-init. Theo c\u00e1ch \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1ea3m b\u1ea3o r\u1eb1ng t\u1ec7p ch\u1ec9 \u0111\u01b0\u1ee3c t\u1ea1o sau khi t\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 t\u1ea1o v\u00e0 c\u00e0i \u0111\u1eb7t ph\u1ea7n m\u1ec1m.<\/p>\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 kh\u00e1c cho th\u1ea5y t\u00ednh n\u0103ng \u0111\u00f3 t\u1eaft b\u1eb1ng c\u00e1ch t\u1ea1o c\u1ea5u h\u00ecnh&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-install-apache-web-server-ubuntu-18-04\/\">Apache Web Server<\/a>&nbsp;. S\u1eed d\u1ee5ng&nbsp;<code>defer<\/code>t\u00f9y ch\u1ecdn n\u00e0y \u0111\u1ea3m b\u1ea3o r\u1eb1ng Apache \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t v\u00e0 ng\u01b0\u1eddi d\u00f9ng Apache (th\u01b0\u1eddng l\u00e0&nbsp;<code>www-data<\/code>tr\u00ean Debian v\u00e0 Ubuntu) \u0111\u01b0\u1ee3c t\u1ea1o tr\u01b0\u1edbc t\u1ec7p.<\/p>\n<pre class=\"wp-block-code\"><code>write_files:\n  - path: \/etc\/apache2\/sites-available\/example.com.conf\n    content: |\n      &lt;VirtualHost *:80&gt;\n          ServerAdmin webmaster@example.com\n          ServerName example.com\n          ServerAlias www.example.com\n          DocumentRoot \/var\/www\/example.com\/html\/\n          ErrorLog \/var\/www\/example.com\/logs\/error.log\n          CustomLog \/var\/www\/example.com\/logs\/access.log combined\n      &lt;\/VirtualHost&gt;      \n    owner: 'www-data:www-data'\n    permissions: '0640'\n    defer: true<\/code><\/pre>\n<p>Vi\u1ec7c b\u1ecf qua&nbsp;<code>defer: true<\/code>t\u00f9y ch\u1ecdn tr\u00ean s\u1ebd d\u1eabn \u0111\u1ebfn l\u1ed7i v\u00ec&nbsp;<code>www-data<\/code>ng\u01b0\u1eddi d\u00f9ng ch\u01b0a t\u1ed3n t\u1ea1i t\u1ea1i th\u1eddi \u0111i\u1ec3m cloud-init c\u1ed1 g\u1eafng t\u1ea1o t\u1ec7p.<\/p>\n<h2 id=\"modify-a-file\">S\u1eeda \u0111\u1ed5i m\u1ed9t t\u1eadp tin<a href=\"https:\/\/www.linode.com\/docs\/guides\/write-files-with-cloud-init\/#modify-a-file\"><\/a><\/h2>\n<p>Khi b\u1ea1n c\u1ea7n s\u1eeda \u0111\u1ed5i m\u1ed9t t\u1ec7p, cloud-init c\u00f3 m\u1ed9t s\u1ed1 c\u00e1ch \u0111\u1ec3 s\u1eed d\u1ee5ng:<\/p>\n<ul>\n<li>T\u00f9y ch\u1ecdn n\u00e0y&nbsp;<code>write_files<\/code>c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c s\u1eeda \u0111\u1ed5i t\u1ec7p c\u01a1 b\u1ea3n b\u1eb1ng&nbsp;<code>append: true<\/code>t\u00f9y ch\u1ecdn c\u1ee7a n\u00f3. V\u00ed d\u1ee5, v\u00ed d\u1ee5 b\u00ean d\u01b0\u1edbi s\u1eeda \u0111\u1ed5i c\u1ea5u h\u00ecnh d\u1ecbch v\u1ee5 SSH b\u1eb1ng c\u00e1ch th\u00eam&nbsp;<code>PermitRootLogin no<\/code>quy t\u1eafc:<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>write_files:\n  - path: \/etc\/ssh\/sshd_config\n    content: PermitRootLogin no\n    append: true<\/code><\/pre>\n<ul>\n<li>N\u1ebfu kh\u00f4ng,&nbsp;<code>write_files<\/code>ch\u1ec9 c\u00f3 th\u1ec3 cung c\u1ea5p c\u00e1c s\u1eeda \u0111\u1ed5i b\u1eb1ng c\u00e1ch t\u1ea1o l\u1ea1i c\u00e1c t\u1ec7p. Trong tr\u01b0\u1eddng h\u1ee3p \u0111\u00f3, b\u1ea1n s\u1ebd c\u1ea7n sao ch\u00e9p to\u00e0n b\u1ed9 c\u1ea5u h\u00ecnh v\u1edbi c\u00e1c s\u1eeda \u0111\u1ed5i mong mu\u1ed1n v\u00e0o t\u1eadp l\u1ec7nh cloud-config c\u1ee7a m\u00ecnh.<\/li>\n<li>Gi\u1ea3i ph\u00e1p d\u1ec5 ti\u1ebfp c\u1eadn v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec h\u01a1n l\u00e0 s\u1eed d\u1ee5ng&nbsp;<code>runcmd<\/code>t\u00f9y ch\u1ecdn c\u1ee7a cloud-init \u0111\u1ec3 ch\u1ea1y&nbsp;<code>sed<\/code>l\u1ec7nh tr\u00ean m\u00e1y ch\u1ee7.&nbsp;<code>sed<\/code>cung c\u1ea5p kh\u1ea3 n\u0103ng ch\u1ec9nh s\u1eeda v\u0103n b\u1ea3n th\u00f4ng qua l\u1ec7nh shell v\u00e0&nbsp;<code>runcmd<\/code>cho ph\u00e9p b\u1ea1n ch\u1ea1y l\u1ec7nh shell t\u1eeb t\u1eadp l\u1ec7nh cloud-init. T\u00ecm hi\u1ec3u th\u00eam v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>runcmd<\/code>trong h\u01b0\u1edbng d\u1eabn c\u1ee7a ch\u00fang t\u00f4i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/run-shell-commands-with-cloud-init\/\">S\u1eed d\u1ee5ng Cloud-Init \u0111\u1ec3 ch\u1ea1y l\u1ec7nh v\u00e0 t\u1eadp l\u1ec7nh Bash khi kh\u1edfi \u0111\u1ed9ng l\u1ea7n \u0111\u1ea7u<\/a>&nbsp;v\u00e0 t\u00ecm hi\u1ec3u th\u00eam&nbsp;<code>sed<\/code>trong h\u01b0\u1edbng d\u1eabn c\u1ee7a ch\u00fang t\u00f4i&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/manipulate-text-from-the-command-line-with-sed\/\">Thao t\u00e1c v\u0103n b\u1ea3n t\u1eeb d\u00f2ng l\u1ec7nh b\u1eb1ng sed<\/a>&nbsp;.T\u00f9y ch\u1ecdn n\u00e0y&nbsp;<code>runcmd<\/code>l\u1ea5y danh s\u00e1ch c\u00e1c l\u1ec7nh shell. Trong v\u00ed d\u1ee5 sau, hai l\u1ec7nh shell ch\u1ea1y \u0111\u1ec3 thay \u0111\u1ed5i c\u1ea5u h\u00ecnh d\u1ecbch v\u1ee5 SSH, t\u01b0\u01a1ng t\u1ef1 nh\u01b0 v\u00ed d\u1ee5 tr\u00ean. Tuy nhi\u00ean,&nbsp;<code>sed<\/code>cho ph\u00e9p b\u1ea1n thay th\u1ebf c\u00e1c thi\u1ebft l\u1eadp hi\u1ec7n c\u00f3, thay v\u00ec ch\u1ec9 th\u00eam m\u1ed9t thi\u1ebft l\u1eadp m\u1edbi.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>runcmd:\n  - sed -i -e 's\/PermitRootLogin\\s*yes\/PermitRootLogin no\/g' \/etc\/ssh\/sshd_config\n  - sed -i -e 's\/#*\\s*PermitRootLogin\/PermitRootLogin\/g' \/etc\/ssh\/sshd_config<\/code><\/pre>\n<ul>\n<li>M\u1ed7i l\u1ec7nh trong&nbsp;<code>runcmd<\/code>danh s\u00e1ch tr\u00ean th\u1ef1c hi\u1ec7n ch\u1ec9nh s\u1eeda t\u1ec7p&nbsp;<code>\/etc\/ssh\/sshd_config<\/code>. C\u00f9ng nhau, hai l\u1ec7nh n\u00e0y chuy\u1ec3n \u0111\u1ed5i hi\u1ec7u qu\u1ea3&nbsp;<code>PermitRootLogin<\/code>sang&nbsp;<code>no<\/code>v\u00e0 \u0111\u1ea3m b\u1ea3o r\u1eb1ng c\u00e0i \u0111\u1eb7t kh\u00f4ng \u0111\u01b0\u1ee3c ch\u00fa th\u00edch.&nbsp;<code>sed<\/code>L\u1ec7nh \u0111\u1ea7u ti\u00ean thay th\u1ebf&nbsp;<code>PermitRootLogin[any number of spaces]yes<\/code>b\u1eb1ng&nbsp;<code>PermitRootLogin no<\/code>, trong khi l\u1ec7nh th\u1ee9 hai x\u00f3a d\u1ea5u ch\u00fa th\u00edch (&nbsp;<code>#<\/code>) kh\u1ecfi \u0111\u1ea7u b\u1ea5t k\u1ef3 l\u1ea7n xu\u1ea5t hi\u1ec7n n\u00e0o c\u1ee7a&nbsp;<code>PermitRootLogin<\/code>.<\/li>\n<\/ul>\n<h2 id=\"verify-file-contents\">X\u00e1c minh n\u1ed9i dung t\u1eadp tin<a href=\"https:\/\/www.linode.com\/docs\/guides\/write-files-with-cloud-init\/#verify-file-contents\"><\/a><\/h2>\n<p>Khi phi\u00ean b\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>cat<\/code>l\u1ec7nh \u0111\u1ec3 x\u00e1c minh r\u1eb1ng c\u00e1c t\u1ec7p \u0111\u01b0\u1ee3c ghi nh\u01b0 mong \u0111\u1ee3i. S\u1eed d\u1ee5ng&nbsp;<code>cat<\/code>v\u1ecb tr\u00ed c\u1ee7a t\u1ec7p, b\u1ea1n s\u1ebd th\u1ea5y n\u1ed9i dung c\u1ee7a t\u1ec7p nh\u01b0 \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh trong cloud-config.<\/p>\n<pre class=\"wp-block-code\"><code>cat \/var\/www\/html\/example.com\/index.html<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n&lt;body&gt;\n  &lt;h1&gt;Hello, World!&lt;\/h1&gt;\n  &lt;p&gt;Welcome to the example web page!&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>B\u1ea1n c\u00f3 th\u1ec3 l\u00e0m t\u01b0\u01a1ng t\u1ef1 \u0111\u1ed1i v\u1edbi c\u00e1c s\u1eeda \u0111\u1ed5i t\u1ec7p. Tuy nhi\u00ean, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n ki\u1ec3m tra \u0111\u00f3 hi\u1ec7u qu\u1ea3 h\u01a1n b\u1eb1ng c\u00e1ch gi\u1edbi h\u1ea1n \u0111\u1ea7u ra th\u00e0nh c\u00e1c thu\u1eadt ng\u1eef kh\u1edbp. \u1ede \u0111\u00e2y, n\u1ed9i&nbsp;<code>sshd_config<\/code>dung \u0111\u01b0\u1ee3c l\u1ecdc ch\u1ec9 th\u00e0nh c\u00e1c d\u00f2ng m\u00e0 cloud-init \u0111\u00e3 th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i (nh\u1eefng d\u00f2ng c\u00f3 ch\u1ee9a&nbsp;<code>PermitRootLogin<\/code>).<\/p>\n<pre class=\"wp-block-code\"><code>cat \/etc\/ssh\/sshd_config | grep PermitRootLogin<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>PermitRootLogin no<\/code><\/pre>\n<p>\u0110\u1ec3 x\u00e1c minh quy\u1ec1n c\u1ee7a t\u1ec7p, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>stat<\/code>l\u1ec7nh. Trong tr\u01b0\u1eddng h\u1ee3p&nbsp;<code>example.com.conf<\/code>t\u1ec7p \u1edf tr\u00ean, h\u00e3y t\u00ecm t\u1ec7p do ng\u01b0\u1eddi s\u1edf h\u1eefu&nbsp;<code>www-data<\/code>v\u00e0 quy\u1ec1n&nbsp;<code>0640<\/code>s\u1edf h\u1eefu.<\/p>\n<pre class=\"wp-block-code\"><code>sudo stat \/etc\/apache2\/sites-available\/example.com.conf<\/code><\/pre>\n<pre class=\"wp-block-code\"><code>  File: \/etc\/apache2\/sites-available\/example.com.conf\n  Size: 284       \tBlocks: 8          IO Block: 4096   regular file\nDevice: 800h\/2048d\tInode: 261541      Links: 1\nAccess: (0640\/-rw-r-----)  Uid: (   33\/www-data)   Gid: (   33\/www-data)\n...<\/code><\/pre>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/cloudinit.readthedocs.io\/en\/latest\/reference\/modules.html#write-files\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Cloud-init &#8211; Tham chi\u1ebfu m\u00f4-\u0111un: Ghi t\u1ec7p<\/a><\/li>\n<li><a href=\"https:\/\/cloudinit.readthedocs.io\/en\/latest\/reference\/examples.html#writing-out-arbitrary-files\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Cloud-init &#8211; V\u00ed d\u1ee5: Vi\u1ebft ra c\u00e1c t\u1eadp tin t\u00f9y \u00fd<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n: https:\/\/www.linode.com\/docs\/guides\/write-files-with-cloud-init\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloud-init&nbsp;l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ti\u00eau chu\u1ea9n c\u00f4ng nghi\u1ec7p t\u1ef1 \u0111\u1ed9ng kh\u1edfi t\u1ea1o m\u00e1y ch\u1ee7 v\u00e0 c\u00f3 h\u1ed7 tr\u1ee3 ph\u00e2n ph\u1ed1i ch\u00e9o, \u0111a n\u1ec1n t\u1ea3ng. Trong khi n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y cung c\u1ea5p cloud-init si\u00eau d\u1eef li\u1ec7u \u0111\u1ec3 tri\u1ec3n khai m\u00e1y ch\u1ee7, d\u1eef li\u1ec7u ng\u01b0\u1eddi d\u00f9ng t\u00f9y ch\u1ec9nh cho ph\u00e9p b\u1ea1n l\u1eadp tr\u00ecnh h\u1ea7u h\u1ebft m\u1ecdi<\/p>\n","protected":false},"author":1,"featured_media":35981,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132],"tags":[],"class_list":["post-34960","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-init"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34960"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34960\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35981"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}