워드프레스를 사용하다보면 여러가지 상황이 있는데요. 워드프레스는 티스토리와 달리 관리를 본인이 해야 하기 때문에 문제가 생기면 난감해지기 마련입니다. 특히 관리자 비밀번호를 잃어버렸을 경우 참 난감한데요. 이번글에서는 워드프레스 관리자 비밀번호를 잊어버렸을때 복구하는 방법에 대해서 알아보도록 하겠습니다.
TABLE OF CONTENTS
워드프레스 관리자 비밀번호를 잊어버렸을 때 복구하는 방법
워드프레스 관리자 비밀번호를 잊어버렸을 때 복구하는 방법은 여러가지가 있습니다. 가장 추천드리는 방법은 제일 마지막에 있는 php 업로드를 통한 방법입니다.
이메일을 통한 복구
워드프레스의 경우 관리자 계정 생성시 이메일 주소를 넣도록 되어 있으며, 일정 주기마다 이메일 계정을 체크하고 있습니다. 만약, 이메일 주소를 입력하였다면, 메일을 통해 비밀번호를 복구할 수 있습니다.
- 도메인주소/wp-admin 으로 관리자 페이지로 접속하면 로그인창 아래에 비밀번호를 잊으셨나요? 를 누릅니다.
- 비밀번호 복구 페이지에서 비밀번호 복구를 하려는 아이디 또는 이메일 주소를 입력하면 메일로 비밀번호 복구 메일을 받을 수 있습니다.
만약, 따로 메일 기능을 설치하지 않은 경우 메일을 보낼 수 없다는 메세지가 보이게 됩니다. 이런 경우에는 메일을 통한 비밀번호 복구는 사용할 수 없습니다.
MySQL 또는 phpMyAdmin을 통한 복구
관리자 비밀번호는 데이터베이스에 보관이 되어 있는데요. 이런 경우에는 데이터 베이스의 관리자비밀번호의 데이터에 직접 변경해주는 것도 가능은 합니다. 하지만, 너무 복잡스러워서 추천드리지는 않습니다.
MySQL 쿼리 또는 phpMyAdmin 을 통한 복구에 관한 내용은 워드프레스 공식 웹사이트를 참고하시기 바랍니다.
테마파일에 업로드하여 비밀번호 복구
FTP또는 터미널로 접속하여 테마 파일에 복구 코드를 삽입할 수 있습니다. 현재 사용하고 있는 테마파일 폴더로 가면 functions.php 파일을 볼 수 있습니다.
사용하고 있는 테마파일의 폴더는 아래와 같은 경로에 있습니다.
워드프레스폴더/wp-contents/themes/사용중인테마이름/functions.php
functions.php 파일을 열어보면 첫 줄에 <?php 로 시작하는데요.
이 다음 줄에 wp_set_password( ‘변경할 패스워드’, 1 ); 를 삽입하고 저장하면, 페이지가 로딩될때 비밀번호가 입력한 ‘변경할 패스워드’ 로 리셋됩니다.
이제 도메인/wp-admin 으로 관리자ID와 입력한 ‘변경할 패스워드’ 로 로그인해 봅니다. 로그인이 가능하면, 다시 해당 functions.php 파일에서 삽입한 wp_set_password( ‘변경할 패스워드’, 1 ); 부분을 삭제하고 저장합니다.
(추천) Emergency.php 파일 업로드하여 비밀번호 복구
제가 제일 추천드리는 방법은 emergency.php 파일을 업로드하여 관리자 비밀번호를 복구하는 이 방법입니다. 위의 방법대로 진행했는데도 저의 경우 소용이 없었는데요. 워드프레스 공식 안내 문서에서도 위의 방법대로 비밀번호 변경을 하지 못한 경우 마지막 방법으로 소개되고 있습니다. 하지만, 오히려 간편하기 때문에 저는 emergency.php 를 업로드 하는 방법을 가장 먼저 추천드립니다.
emergency.php 파일 다운로드
아래 파일을 다운로드 받아 압축을 풀면 emergeny.php 파일을 볼 수 있습니다.
또는 아래의 코드를 복사하여 터미널을 통해서 직접 파일을 생성해줘도 됩니다.
<?php
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
require './wp-blog-header.php';
function meh() {
global $wpdb;
if ( isset( $_POST['update'] ) ) {
$user_login = ( empty( $_POST['e-name'] ) ? '' : sanitize_user( $_POST['e-name'] ) );
$user_pass = ( empty( $_POST[ 'e-pass' ] ) ? '' : $_POST['e-pass'] );
$answer = ( empty( $user_login ) ? '<div id="message" class="updated fade"><p><strong>The user name field is empty.</strong></p></div>' : '' );
$answer .= ( empty( $user_pass ) ? '<div id="message" class="updated fade"><p><strong>The password field is empty.</strong></p></div>' : '' );
if ( $user_login != $wpdb->get_var( "SELECT user_login FROM $wpdb->users WHERE ID = '1' LIMIT 1" ) ) {
$answer .="<div id='message' class='updated fade'><p><strong>That is not the correct administrator username.</strong></p></div>";
}
if ( empty( $answer ) ) {
$wpdb->query( "UPDATE $wpdb->users SET user_pass = MD5('$user_pass'), user_activation_key = '' WHERE user_login = '$user_login'" );
$plaintext_pass = $user_pass;
$message = __( 'Someone, hopefully you, has reset the Administrator password for your WordPress blog. Details follow:' ). "\r\n";
$message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n";
$message .= sprintf( __( 'Password: %s' ), $plaintext_pass ) . "\r\n";
@wp_mail( get_option( 'admin_email' ), sprintf( __( '[%s] Your WordPress administrator password has been changed!' ), get_option( 'blogname' ) ), $message );
$answer="<div id='message' class='updated fade'><p><strong>Your password has been successfully changed</strong></p><p><strong>An e-mail with this information has been dispatched to the WordPress blog administrator</strong></p><p><strong>You should now delete this file off your server. DO NOT LEAVE IT UP FOR SOMEONE ELSE TO FIND!</strong></p></div>";
}
}
return empty( $answer ) ? false : $answer;
}
$answer = meh();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WordPress Emergency PassWord Reset</title>
<meta http-equiv="Content-Type" content="<?php bloginfo( 'html_type' ); ?>; charset=<?php bloginfo( 'charset' ); ?>" />
<link rel="stylesheet" href="<?php bloginfo( 'wpurl' ); ?>/wp-admin/wp-admin.css?version=<?php bloginfo( 'version' ); ?>" type="text/css" />
</head>
<body>
<div class="wrap">
<form method="post" action="">
<h2>WordPress Emergency PassWord Reset</h2>
<p><strong>Your use of this script is at your sole risk. All code is provided "as -is", without any warranty, whether express or implied, of its accuracy, completeness. Further, I shall not be liable for any damages you may sustain by using this script, whether direct, indirect, special, incidental or consequential.</strong></p>
<p>This script is intended to be used as <strong>a last resort</strong> by WordPress administrators that are unable to access the database.
Usage of this script requires that you know the Administrator's user name for the WordPress install. (For most installs, that is going to be "admin" without the quotes.)</p>
<?php
echo $answer;
?>
<p class="submit"><input type="submit" name="update" value="Update Options" /></p>
<fieldset class="options">
<legend>WordPress Administrator</legend>
<label><?php _e( 'Enter Username:' ) ?><br />
<input type="text" name="e-name" id="e-name" class="input" value="<?php echo attribute_escape( stripslashes( $_POST['e-name'] ) ); ?>" size="20" tabindex="10" /></label>
</fieldset>
<fieldset class="options">
<legend>Password</legend>
<label><?php _e( 'Enter New Password:' ) ?><br />
<input type="text" name="e-pass" id="e-pass" class="input" value="<?php echo attribute_escape( stripslashes( $_POST['e-pass'] ) ); ?>" size="25" tabindex="20" /></label>
</fieldset>
<p class="submit"><input type="submit" name="update" value="Update Options" /></p>
</form>
</div>
</body>
</html>
<?php exit; ?>
emergency.php 파일 터미널에서 직접 생성하기
해당 파일을 업로드하거나 직접 작성하여 만들 디렉토리는 워드프레스의 기본 디렉토리입니다. (테마 폴더가 아닙니다.)
워드프레스 기본 디렉토리에는 wp-config.php 파일이 있습니다. 해당 위치에 emergency.php 파일을 FTP를 통해 업로드합니다.
또는, 터미널을 통해 접속한 후 해당 위치에서 나노 편집기를 사용해 직접 파일을 생성합니다.
- sudo nano emergency.php
- nano 편집기 화면에서 위의 코드를 복사 붙여넣기
- 컨트롤 + X 키를 누른 후 yes 입력후 엔터하여 저장하기
emergency.php 페이지를 웹브라우저로 열기
FTP를 통해 파일을 업로드 하거나 나노 편집기를 통해 파일을 생성한 후 아래의 주소대로 접속합니다.
자신의도메인/emergency.php
위와 같이 관리자 아이디와 새로운 비밀번호를 입력하라는 창이 뜹니다. 기존의 관리자 아이디와 새 비밀번호 입력후 Update Options를 클릭하면 새로운 비밀번호로 접속할 수 있습니다.
여기서 주의할 점은 이렇게 관리자 비밀번호를 변경한 후에는 반드시 emrgency.php 파일을 삭제해야 합니다. 이 파일을 그냥 두게 되면 다른 사람이 관리자 비밀번호를 변경하여 사이트가 해킹당할 위험이 있기 때문입니다.
emergency.php 파일 삭제하기
emergency.php 파일은 아래의 방법으로 삭제할 수 있습니다. emergency.php 파일이 있는 워드프레스 폴더에서 아래의 명령어를 입력해 삭제하거나 FTP를 통해 삭제할 수 있습니다.
sudo rm -rf emergency.php
이번 글에서는 워드프레스 관리자 비밀번호 복구 방법에 대해서 알아봤습니다. 지금까지 안테나곰이었습니다.